diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 32b95f5..1c14256 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,5 +1,7 @@ # simple command-line tests SET(CLI_TESTS + test_color + test_color_constexpr test_error test_optional test_pointrect diff --git a/tests/test_color.cc b/tests/test_color.cc new file mode 100644 index 0000000..b19ff85 --- /dev/null +++ b/tests/test_color.cc @@ -0,0 +1,88 @@ +#include + +#include + +#include "testing.h" + +using namespace SDL2pp; + +BEGIN_TEST(int, char*[]) + { + EXPECT_TRUE(Color(1, 2, 3, 4) == Color(1, 2, 3, 4)); + EXPECT_TRUE(Color(1, 2, 3, 4) != Color(0, 2, 3, 4)); + EXPECT_TRUE(Color(1, 2, 3, 4) != Color(1, 0, 3, 4)); + EXPECT_TRUE(Color(1, 2, 3, 4) != Color(0, 2, 3, 4)); + EXPECT_TRUE(Color(1, 2, 3, 4) != Color(1, 2, 3, 0)); + + EXPECT_TRUE(SDL_Color{1, 2, 3, 4} == Color(1, 2, 3, 4)); + EXPECT_TRUE(Color(1, 2, 3, 4) == SDL_Color{1, 2, 3, 4}); + } + + { + EXPECT_TRUE(Color() == Color(0, 0, 0, 0)); + EXPECT_TRUE(Color(1, 2, 3) == Color(1, 2, 3, 255)); + + Color c(1,2,3,4); + + EXPECT_TRUE(c.r == 1 && c.g == 2 && c.b == 3 && c.a == 4); + EXPECT_TRUE(c.GetRed() == 1 && c.GetGreen() == 2 && c.GetBlue() == 3 && c.GetAlpha() == 4); + + c = Color(4, 5, 6, 7); + + EXPECT_TRUE(c.r == 4 && c.g == 5 && c.b == 6 && c.a == 7); + EXPECT_TRUE(c.GetRed() == 4 && c.GetGreen() == 5 && c.GetBlue() == 6 && c.GetAlpha() == 7); + + c.SetRed(8).SetGreen(9).SetBlue(10).SetAlpha(11); + + EXPECT_TRUE(c.r == 8 && c.g == 9 && c.b == 10 && c.a == 11); + + c = SDL_Color{12, 13, 14, 15}; + + EXPECT_TRUE(c.r == 12 && c.g == 13 && c.b == 14 && c.a == 15); + } + + { + // Self assignment + Color c(1, 2, 3, 4); + + c = c; + + EXPECT_TRUE(c == Color(1, 2, 3, 4)); + } + + { + // Self move-assignment + Color c(1, 2, 3, 4); + + Color& cref = c; + c = std::move(cref); + + EXPECT_TRUE(c.GetRed() == 1 && c.GetGreen() == 2 && c.GetBlue() == 3 && c.GetAlpha() == 4); + } + + { + // Hashes + EXPECT_TRUE(std::hash()(Color(1, 2, 3, 4)) == std::hash()(Color(1, 2, 3, 4))); + EXPECT_TRUE(std::hash()(Color(1, 2, 3, 4)) != std::hash()(Color(2, 1, 3, 4))); + EXPECT_TRUE(std::hash()(Color(1, 2, 3, 4)) != std::hash()(Color(1, 2, 4, 3))); + } + + { + // Construction from and comparison with SDL objects + SDL_Color sdlcolor = { 1, 2, 3, 4 }; + + EXPECT_TRUE(Color(sdlcolor) == Color(1, 2, 3, 4)); + + EXPECT_TRUE(Color(sdlcolor) != Color(0, 2, 3, 4)); + + EXPECT_TRUE(Color(1, 2, 3, 4) == sdlcolor); + EXPECT_TRUE(Color(0, 2, 3, 4) != sdlcolor); + } + + { + // streams + std::stringstream stream; + stream << Color(1, 2, 3, 4); + EXPECT_EQUAL(stream.str(), "[r:1,g:2,b:3,a:4]"); + } +END_TEST() diff --git a/tests/test_color_constexpr.cc b/tests/test_color_constexpr.cc new file mode 100644 index 0000000..a672956 --- /dev/null +++ b/tests/test_color_constexpr.cc @@ -0,0 +1,27 @@ +#include + +#include + +using namespace SDL2pp; + +int main(int, char*[]) { + constexpr SDL_Color sc{1, 2, 3, 4}; + constexpr Color c1; + constexpr Color c2(sc); + constexpr Color c3(1, 2, 3, 4); + constexpr Color c4(c2); + constexpr Color c5(1, 2, 3); + + constexpr bool b1 = c2 == c4; + constexpr bool b2 = c1 != c2; + + static_assert(b1, ""); + static_assert(b2, ""); + + constexpr int r = c1.GetRed(); + constexpr int g = c1.GetGreen(); + constexpr int b = c1.GetBlue(); + constexpr int a = c1.GetAlpha(); + + static_assert(r == 0 && g == 0 && b == 0 && a == 0, ""); +}