diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 35225455..4fd60a3e 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -9,9 +9,7 @@ add_executable(tests test_qbsp.hh test_qbsp_q2.cc test_vis.cc - testutils.hh ${CMAKE_CURRENT_BINARY_DIR}/../testmaps.hh - testutils.hh benchmark.cc test_bsputil.cc test_main.hh) diff --git a/tests/test_qbsp.cc b/tests/test_qbsp.cc index 4ded090a..aed4104c 100644 --- a/tests/test_qbsp.cc +++ b/tests/test_qbsp.cc @@ -22,7 +22,6 @@ #include #include #include -#include "testutils.hh" #include "test_main.hh" // FIXME: Clear global data (planes, etc) between each test @@ -573,7 +572,7 @@ TEST(testmapsQ1, simpleSealed) EXPECT_EQ(bsp.dleafs[1].nummarksurfaces, 6); EXPECT_EQ(bsp.dleafs[1].firstmarksurface, 0); - EXPECT_VECTORS_UNOREDERED_EQUAL(bsp.dleaffaces, std::vector{0, 1, 2, 3, 4, 5}); + EXPECT_THAT(bsp.dleaffaces, testing::UnorderedElementsAre(0, 1, 2, 3, 4, 5)); } } @@ -610,8 +609,8 @@ TEST(testmapsQ1, simpleSealed2) auto *other_plus_y = BSP_FindFaceAtPoint(&bsp, &bsp.dmodels[0], qvec3d(-64, -368, 128), qvec3d(0, 1, 0)); // back wall +Y normal - EXPECT_VECTORS_UNOREDERED_EQUAL(other_markfaces, - std::vector{other_floor, other_ceil, other_minus_x, other_plus_x, other_plus_y}); + EXPECT_THAT(other_markfaces, + testing::UnorderedElementsAre(other_floor, other_ceil, other_minus_x, other_plus_x, other_plus_y)); } TEST(testmapsQ1, q1FuncIllusionaryVisblocker) diff --git a/tests/test_qbsp_q2.cc b/tests/test_qbsp_q2.cc index ba945054..bd36a277 100644 --- a/tests/test_qbsp_q2.cc +++ b/tests/test_qbsp_q2.cc @@ -1,4 +1,5 @@ #include +#include #include #include @@ -11,7 +12,6 @@ #include #include "test_qbsp.hh" -#include "testutils.hh" TEST(testmapsQ2, detail) { @@ -189,8 +189,9 @@ TEST(testmapsQ2, areaportal) // // the conceptual area portal has portalnum 1, and consists of two dareaportals entries with connections to area 1 // and 2 - EXPECT_VECTORS_UNOREDERED_EQUAL(bsp.dareaportals, std::vector{{0, 0}, {1, 1}, {1, 2}}); - EXPECT_VECTORS_UNOREDERED_EQUAL(bsp.dareas, std::vector{{0, 0}, {1, 1}, {1, 2}}); + EXPECT_THAT( + bsp.dareaportals, testing::UnorderedElementsAreArray(std::vector{{0, 0}, {1, 1}, {1, 2}})); + EXPECT_THAT(bsp.dareas, testing::UnorderedElementsAreArray(std::vector{{0, 0}, {1, 1}, {1, 2}})); // look up the leafs const qvec3d player_start{-88, -112, 120}; @@ -221,8 +222,8 @@ TEST(testmapsQ2, areaportal) EXPECT_EQ(Q2_CONTENTS_SOLID, Leaf_Brushes(&bsp, void_leaf).at(0)->contents); // check leaf areas - EXPECT_VECTORS_UNOREDERED_EQUAL( - (std::vector{1, 2}), std::vector{player_start_leaf->area, other_room_leaf->area}); + EXPECT_THAT( + (std::vector{player_start_leaf->area, other_room_leaf->area}), testing::UnorderedElementsAre(1, 2)); // the areaportal leaf itself actually gets assigned to one of the two sides' areas EXPECT_TRUE(areaportal_leaf->area == 1 || areaportal_leaf->area == 2); EXPECT_EQ(0, void_leaf->area); // a solid leaf gets the invalid area @@ -250,8 +251,9 @@ TEST(testmapsQ2, areaportalWithDetail) // // the conceptual area portal has portalnum 1, and consists of two dareaportals entries with connections to area 1 // and 2 - EXPECT_VECTORS_UNOREDERED_EQUAL(bsp.dareaportals, std::vector{{0, 0}, {1, 1}, {1, 2}}); - EXPECT_VECTORS_UNOREDERED_EQUAL(bsp.dareas, std::vector{{0, 0}, {1, 1}, {1, 2}}); + EXPECT_THAT( + bsp.dareaportals, testing::UnorderedElementsAreArray(std::vector{{0, 0}, {1, 1}, {1, 2}})); + EXPECT_THAT(bsp.dareas, testing::UnorderedElementsAreArray(std::vector{{0, 0}, {1, 1}, {1, 2}})); } TEST(testmapsQ2, nodrawLight) @@ -451,37 +453,37 @@ TEST(testmapsQ2, liquids) const qvec3d wateropaque_trans33 = watertrans33_trans66 - qvec3d(0, 0, 48); const qvec3d floor_wateropaque = wateropaque_trans33 - qvec3d(0, 0, 48); - EXPECT_VECTORS_UNOREDERED_EQUAL(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], watertrans66_air)), - std::vector({"e1u1/bluwter", "e1u1/bluwter"})); + EXPECT_THAT(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], watertrans66_air)), + testing::UnorderedElementsAre("e1u1/bluwter", "e1u1/bluwter")); EXPECT_EQ(0, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], watertrans33_trans66).size()); EXPECT_EQ(0, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], wateropaque_trans33).size()); - EXPECT_VECTORS_UNOREDERED_EQUAL(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], floor_wateropaque)), - std::vector({"e1u1/c_met11_2"})); + EXPECT_THAT(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], floor_wateropaque)), + testing::UnorderedElementsAre("e1u1/c_met11_2")); } const qvec3d watertrans66_slimetrans66{-116, -144, 116}; // water trans66 / slime trans66 { - EXPECT_VECTORS_UNOREDERED_EQUAL( + EXPECT_THAT( TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], watertrans66_slimetrans66, qvec3d(0, -1, 0))), - std::vector({"e1u1/sewer1"})); + testing::UnorderedElementsAre("e1u1/sewer1")); - EXPECT_VECTORS_UNOREDERED_EQUAL( + EXPECT_THAT( TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], watertrans66_slimetrans66, qvec3d(0, 1, 0))), - std::vector({"e1u1/sewer1"})); + testing::UnorderedElementsAre("e1u1/sewer1")); } // slime trans66 / lava trans66 const qvec3d slimetrans66_lavatrans66 = watertrans66_slimetrans66 + qvec3d(0, 48, 0); { - EXPECT_VECTORS_UNOREDERED_EQUAL( + EXPECT_THAT( TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], slimetrans66_lavatrans66, qvec3d(0, -1, 0))), - std::vector({"e1u1/brlava"})); + testing::UnorderedElementsAre("e1u1/brlava")); - EXPECT_VECTORS_UNOREDERED_EQUAL( + EXPECT_THAT( TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], slimetrans66_lavatrans66, qvec3d(0, 1, 0))), - std::vector({"e1u1/brlava"})); + testing::UnorderedElementsAre("e1u1/brlava")); } } @@ -589,36 +591,35 @@ TEST(testmapsQ2, mirrorinside) { SCOPED_TRACE("window is not two sided by default"); const qvec3d window_pos{192, 96, 156}; - EXPECT_VECTORS_UNOREDERED_EQUAL(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], window_pos)), - std::vector({"e2u2/wndow1_1"})); + EXPECT_THAT(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], window_pos)), + testing::UnorderedElementsAre("e2u2/wndow1_1")); } { SCOPED_TRACE("aux is not two sided by default"); const qvec3d aux_pos{32, 96, 156}; - EXPECT_VECTORS_UNOREDERED_EQUAL(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], aux_pos)), - std::vector({"e1u1/brwater"})); + EXPECT_THAT(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], aux_pos)), + testing::UnorderedElementsAre("e1u1/brwater")); } { SCOPED_TRACE("mist is two sided by default"); const qvec3d mist_pos{32, -28, 156}; - EXPECT_VECTORS_UNOREDERED_EQUAL(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], mist_pos)), - std::vector({"e1u1/brwater", "e1u1/brwater"})); + EXPECT_THAT(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], mist_pos)), + testing::UnorderedElementsAre("e1u1/brwater", "e1u1/brwater")); } { SCOPED_TRACE("_mirrorinside 0 disables the inside faces on mist"); const qvec3d mist_mirrorinside0_pos{32, -224, 156}; - EXPECT_VECTORS_UNOREDERED_EQUAL( - TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], mist_mirrorinside0_pos)), - std::vector({"e1u1/brwater"})); + EXPECT_THAT(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], mist_mirrorinside0_pos)), + testing::UnorderedElementsAre("e1u1/brwater")); } { SCOPED_TRACE("_mirrorinside 1 works on func_detail_fence"); - EXPECT_VECTORS_UNOREDERED_EQUAL(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], {32, -348, 156})), - std::vector({"e1u1/alphamask", "e1u1/alphamask"})); + EXPECT_THAT(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], {32, -348, 156})), + testing::UnorderedElementsAre("e1u1/alphamask", "e1u1/alphamask")); } } @@ -1119,14 +1120,14 @@ TEST(testmapsQ2, chopOrder0) { const auto [bsp, bspx, prt] = LoadTestmapQ2("q2_chop_order_0.map"); - EXPECT_VECTORS_UNOREDERED_EQUAL(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], {0, 0, 0})), - std::vector({"e1u1/ggrat4_2"})); + EXPECT_THAT(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], {0, 0, 0})), + testing::UnorderedElementsAre("e1u1/ggrat4_2")); } TEST(testmapsQ2, chopOrder1) { const auto [bsp, bspx, prt] = LoadTestmapQ2("q2_chop_order_1.map"); - EXPECT_VECTORS_UNOREDERED_EQUAL(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], {0, 0, 0})), - std::vector({"e1u1/+0btshoot2"})); + EXPECT_THAT(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], {0, 0, 0})), + testing::UnorderedElementsAre("e1u1/+0btshoot2")); } diff --git a/tests/test_vis.cc b/tests/test_vis.cc index 91bc2ea2..d4d48e13 100644 --- a/tests/test_vis.cc +++ b/tests/test_vis.cc @@ -5,7 +5,7 @@ #include #include "test_qbsp.hh" -#include "testutils.hh" +#include static bool q2_leaf_sees( const mbsp_t &bsp, const std::unordered_map> &vis, const mleaf_t *a, const mleaf_t *b) @@ -154,7 +154,8 @@ TEST(vis, q1FuncIllusionaryVisblockerInteractions) const auto in_visblocker_covered_by_illusionary = qvec3d(48, 248, 56); auto *player_start_leaf = BSP_FindLeafAtPoint(&bsp, &bsp.dmodels[0], player_start); - auto *in_visblocker_covered_by_illusionary_leaf = BSP_FindLeafAtPoint(&bsp, &bsp.dmodels[0], in_visblocker_covered_by_illusionary); + auto *in_visblocker_covered_by_illusionary_leaf = + BSP_FindLeafAtPoint(&bsp, &bsp.dmodels[0], in_visblocker_covered_by_illusionary); EXPECT_FALSE(q1_leaf_sees(bsp, vis, in_visblocker_covered_by_illusionary_leaf, player_start_leaf)); } diff --git a/tests/testutils.hh b/tests/testutils.hh deleted file mode 100644 index e546cd08..00000000 --- a/tests/testutils.hh +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#include -#include - -template -void EXPECT_VECTORS_UNOREDERED_EQUAL(const A &a, const A &b) -{ - if (a.size() != b.size()) { - ADD_FAILURE() << "Expected vectors to be equal (ignoring order)"; - return; - } - - for (auto &a_elem : a) { - if (std::find(b.begin(), b.end(), a_elem) == b.end()) { - ADD_FAILURE() << "Expected vectors to be equal (ignoring order)"; - return; - } - } -}