diff options
| author | Admiral H. Curtiss <pikachu025@gmail.com> | 2024-06-10 22:22:20 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-10 22:22:20 +0200 |
| commit | e405ad4206f725a6d03b97d0625eb13b3eeb276f (patch) | |
| tree | d0765aead426effce37969056358cbcce2d088c5 /Source/UnitTests/Common/MathUtilTest.cpp | |
| parent | e7e1322c571901f9300552ab7316ed0dab1af162 (diff) | |
| parent | 9b0dcc83d1d623e04928640770103e06a94c7f6f (diff) | |
Merge pull request #12827 from nlebeck/mathutil-tests-2
Add some unit tests for the `Rectangle` class
Diffstat (limited to 'Source/UnitTests/Common/MathUtilTest.cpp')
| -rw-r--r-- | Source/UnitTests/Common/MathUtilTest.cpp | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/Source/UnitTests/Common/MathUtilTest.cpp b/Source/UnitTests/Common/MathUtilTest.cpp index 78416772a9..7758bb5d7f 100644 --- a/Source/UnitTests/Common/MathUtilTest.cpp +++ b/Source/UnitTests/Common/MathUtilTest.cpp @@ -67,3 +67,125 @@ TEST(MathUtil, SaturatingCast) EXPECT_EQ(16777216, MathUtil::SaturatingCast<s32>(float(16777216))); EXPECT_EQ(16777216, MathUtil::SaturatingCast<s32>(float(16777217))); } + +TEST(MathUtil, RectangleEquality) +{ + MathUtil::Rectangle<int> rect_a(1, 1, 4, 7); + MathUtil::Rectangle<int> rect_b(1, 1, 4, 7); + EXPECT_EQ(rect_a, rect_b); + + // Left not equal + MathUtil::Rectangle<int> rect_c(0, 1, 4, 7); + EXPECT_NE(rect_a, rect_c); + + // Top not equal + MathUtil::Rectangle<int> rect_d(1, 3, 4, 7); + EXPECT_NE(rect_a, rect_d); + + // Right not equal + MathUtil::Rectangle<int> rect_e(1, 1, 2, 7); + EXPECT_NE(rect_a, rect_e); + + // Bottom not equal + MathUtil::Rectangle<int> rect_f(1, 1, 4, 9); + EXPECT_NE(rect_a, rect_f); + + // No coordinates equal + MathUtil::Rectangle<int> rect_g(0, 3, 2, 9); + EXPECT_NE(rect_a, rect_g); +} + +TEST(MathUtil, RectangleGetWidthSigned) +{ + // left < right + MathUtil::Rectangle<int> rect_a(2, 1, 3, 2); + EXPECT_EQ(rect_a.GetWidth(), 1); + + // left > right + MathUtil::Rectangle<int> rect_b(3, 1, 1, 2); + EXPECT_EQ(rect_b.GetWidth(), 2); + + // left == right + MathUtil::Rectangle<int> rect_c(3, 1, 3, 2); + EXPECT_EQ(rect_c.GetWidth(), 0); + + // Most significant bit differs, left < right + MathUtil::Rectangle<int> rect_d(-9, 1, 1, 2); + EXPECT_EQ(rect_d.GetWidth(), 10); + + // Most significant bit differs, left > right + MathUtil::Rectangle<int> rect_e(1, 1, -6, 2); + EXPECT_EQ(rect_e.GetWidth(), 7); +} + +TEST(MathUtil, RectangleGetWidthUnsigned) +{ + // left < right + MathUtil::Rectangle<u32> rect_a(1, 1, 6, 2); + EXPECT_EQ(rect_a.GetWidth(), u32{5}); + + // left > right + MathUtil::Rectangle<u32> rect_b(5, 1, 1, 2); + EXPECT_EQ(rect_b.GetWidth(), u32{4}); + + // left == right + MathUtil::Rectangle<u32> rect_c(1, 2, 1, 2); + EXPECT_EQ(rect_c.GetWidth(), u32{0}); + + // Most significant bit differs, left < right + MathUtil::Rectangle<u32> rect_d(2, 1, 0xFFFFFFF5, 2); + EXPECT_EQ(rect_d.GetWidth(), u32{0xFFFFFFF3}); + + // Most significant bit differs, left > right + MathUtil::Rectangle<u32> rect_e(0xFFFFFFF7, 1, 1, 2); + EXPECT_EQ(rect_e.GetWidth(), u32{0xFFFFFFF6}); +} + +TEST(MathUtil, RectangleGetHeightSigned) +{ + // top < bottom + MathUtil::Rectangle<int> rect_a(1, 1, 2, 3); + EXPECT_EQ(rect_a.GetHeight(), 2); + + // top > bottom + MathUtil::Rectangle<int> rect_b(1, 4, 2, 0); + EXPECT_EQ(rect_b.GetHeight(), 4); + + // top == bottom + MathUtil::Rectangle<int> rect_c(1, 3, 2, 3); + EXPECT_EQ(rect_c.GetHeight(), 0); + + // Most significant bit differs, top < bottom + MathUtil::Rectangle<int> rect_d(1, -2, 2, 1); + EXPECT_EQ(rect_d.GetHeight(), 3); + + // Most significant bit differs, top > bottom + MathUtil::Rectangle<int> rect_e(1, 0, 2, -1); + EXPECT_EQ(rect_e.GetHeight(), 1); +} + +TEST(MathUtil, RectangleGetHeightUnsigned) +{ + // top < bottom + MathUtil::Rectangle<u32> rect_a(1, 1, 2, 2); + EXPECT_EQ(rect_a.GetHeight(), u32{1}); + + // top > bottom + MathUtil::Rectangle<u32> rect_b(1, 4, 2, 2); + EXPECT_EQ(rect_b.GetHeight(), u32{2}); + + // top == bottom + MathUtil::Rectangle<u32> rect_c(1, 1, 2, 1); + EXPECT_EQ(rect_c.GetHeight(), u32{0}); + + // Most significant bit differs, top < bottom + MathUtil::Rectangle<u32> rect_d(1, 2, 2, 0xFFFFFFFB); + EXPECT_EQ(rect_d.GetHeight(), u32{0xFFFFFFF9}); + + // Most significant bit differs, top > bottom + MathUtil::Rectangle<u32> rect_e(1, 0xFFFFFFF9, 2, 1); + EXPECT_EQ(rect_e.GetHeight(), u32{0xFFFFFFF8}); +} + +// TODO: Add unit test coverage for `Rectangle::ClampUL`. (And consider removing +// `Rectangle::ClampLL`, which does not have any callers.) |
