Path: blob/master/src/common-tests/rectangle_tests.cpp
4214 views
// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <[email protected]>1// SPDX-License-Identifier: CC-BY-NC-ND-4.023#include "common/gsvector.h"45#include <gtest/gtest.h>67TEST(Rectangle, AdjacentRectanglesNotIntersecting)8{9GSVector4i r1(0, 0, 10, 10);10GSVector4i r2(10, 10, 20, 20);11ASSERT_FALSE(r1.rintersects(r2));12}1314TEST(Rectangle, IntersectingRectanglesIntersecting)15{16GSVector4i r1(0, 0, 10, 10);17GSVector4i r2(9, 9, 14, 14);18ASSERT_TRUE(r1.rintersects(r2));19ASSERT_TRUE(r2.rintersects(r1));20}2122TEST(Rectangle, PointContainedInRectangle)23{24GSVector4i r1(0, 0, 10, 10);25GSVector4i r2(5, 5, 6, 6);26ASSERT_TRUE(r1.rcontains(r2));27}2829TEST(Rectangle, PointOutsideRectangleNotContained)30{31GSVector4i r1(0, 0, 10, 10);32GSVector4i r2(10, 10, 11, 11);33ASSERT_FALSE(r1.rcontains(r2));34}3536TEST(Rectangle, RectangleSize)37{38GSVector4i r(0, 0, 10, 10);39ASSERT_EQ(r.width(), 10);40ASSERT_EQ(r.height(), 10);41}4243TEST(Rectangle, IncludeAfterInvalid)44{45GSVector4i r(0, 0, 1, 1);46GSVector4i r2(5, 5, 10, 10);47GSVector4i ru(0, 0, 10, 10);48ASSERT_TRUE(r.runion(r2).eq(ru));49}5051TEST(Rectangle, EmptyRectangleHasNoExtents)52{53GSVector4i r(0, 0, 0, 0);54ASSERT_EQ(r.width(), 0);55ASSERT_EQ(r.height(), 0);56ASSERT_TRUE(r.rempty());57}5859TEST(Rectangle, NonEmptyRectangleHasExtents)60{61GSVector4i r(0, 0, 1, 1);62ASSERT_EQ(r.width(), 1);63ASSERT_EQ(r.height(), 1);64ASSERT_FALSE(r.rempty());65}6667TEST(Rectangle, RelationalOperators)68{69GSVector4i r1(0, 0, 1, 1);70GSVector4i r2(1, 1, 2, 2);7172ASSERT_TRUE(r1.eq(r1));73ASSERT_TRUE(r1.lt32(r2).alltrue());74ASSERT_TRUE(r2.eq(r2));75ASSERT_TRUE(r2.gt32(r1).alltrue());76ASSERT_FALSE(r2.lt32(r1).alltrue());77ASSERT_FALSE(r1.eq(r2));78}7980TEST(Rectangle, ValidRectangles)81{82static constexpr GSVector4i cases[] = {83GSVector4i::cxpr(1, 2, 3, 4),84GSVector4i::cxpr(-5, -10, -1, -2),85GSVector4i::cxpr(0, 0, 1, 1),86GSVector4i::cxpr(100, 200, 300, 400),87GSVector4i::cxpr(-1000, -2000, 500, 600),88GSVector4i::cxpr(5, 10, 6, 12),89GSVector4i::cxpr(-10, -20, -5, -15),90GSVector4i::cxpr(-5, 0, 5, 10),91GSVector4i::cxpr(-100, -200, 100, 200),92GSVector4i::cxpr(-1, -2, 0, 1),93};9495for (GSVector4i tcase : cases)96{97ASSERT_TRUE(tcase.rvalid());98ASSERT_FALSE(tcase.rempty());99}100}101102TEST(Rectangle, InvalidRectangles)103{104static constexpr GSVector4i cases[] = {105// left < right but not top < bottom106GSVector4i::cxpr(1, 4, 3, 2),107GSVector4i::cxpr(-5, -2, -1, -10),108GSVector4i::cxpr(0, 1, 1, 0),109GSVector4i::cxpr(100, 400, 300, 200),110GSVector4i::cxpr(-1000, 600, 500, -2000),111GSVector4i::cxpr(5, 12, 6, 10),112GSVector4i::cxpr(-10, -15, -5, -20),113GSVector4i::cxpr(-5, 10, 5, 0),114GSVector4i::cxpr(-100, 200, 100, -200),115GSVector4i::cxpr(-1, 1, 0, -2),116117// not left < right but top < bottom118GSVector4i::cxpr(3, 2, 1, 4),119GSVector4i::cxpr(-1, -10, -5, -2),120GSVector4i::cxpr(1, 0, 0, 1),121GSVector4i::cxpr(300, 200, 100, 400),122GSVector4i::cxpr(500, -2000, -1000, 600),123GSVector4i::cxpr(6, 10, 5, 12),124GSVector4i::cxpr(-5, -20, -10, -15),125GSVector4i::cxpr(5, 0, -5, 10),126GSVector4i::cxpr(100, -200, -100, 200),127GSVector4i::cxpr(0, -2, -1, 1),128};129130for (GSVector4i tcase : cases)131{132ASSERT_FALSE(tcase.rvalid());133ASSERT_TRUE(tcase.rempty());134}135}136137138