diff --git a/qbsp/test_qbsp.cc b/qbsp/test_qbsp.cc index 05df966f..09c4e30a 100644 --- a/qbsp/test_qbsp.cc +++ b/qbsp/test_qbsp.cc @@ -994,6 +994,8 @@ TEST_CASE("q1_cube", "[testmaps_q1]") {80, -144, 112} }; + CHECK(bsp.dedges.size() == 13); // index 0 is reserved, and the cube has 12 edges + REQUIRE(7 == bsp.dleafs.size()); // check the solid leaf @@ -1023,6 +1025,17 @@ TEST_CASE("q1_cube", "[testmaps_q1]") CHECK(cube_bounds.grow(-1).maxs() == bsp.dmodels[0].maxs); } +/** + * Two solid cuboids touching along one edge + */ +TEST_CASE("q1_cubes", "[testmaps_q1]") +{ + const auto [bsp, bspx, prt] = LoadTestmapQ1("qbsp_q1_cubes.map"); + + // index 0 is reserved, and the first cube has 12 edges, the second can share one edge so only needs 11 + CHECK(bsp.dedges.size() == 24); +} + /** * Ensure submodels that are all "clip" get bounds set correctly */ diff --git a/testmaps/qbsp_q1_cubes.map b/testmaps/qbsp_q1_cubes.map new file mode 100644 index 00000000..9a050e7e --- /dev/null +++ b/testmaps/qbsp_q1_cubes.map @@ -0,0 +1,33 @@ +// Game: Quake +// Format: Valve +// entity 0 +{ +"mapversion" "220" +"classname" "worldspawn" +"wad" "deprecated/free_wad.wad;deprecated/fence.wad;deprecated/origin.wad;deprecated/hintskip.wad" +"_wateralpha" "0.5" +"_tb_def" "builtin:Quake.fgd" +// brush 0 +{ +( 32 -256 112 ) ( 32 -255 112 ) ( 32 -256 113 ) orangestuff8 [ 0 1 0 -16 ] [ 0 0 -1 0 ] 0 1 1 +( 64 -240 96 ) ( 63 -240 96 ) ( 64 -240 97 ) orangestuff8 [ -1 0 0 16 ] [ 0 0 -1 0 ] 180 1 1 +( 64 -576 80 ) ( 64 -575 80 ) ( 63 -576 80 ) orangestuff8 [ 1 0 0 -16 ] [ 0 -1 0 16 ] 180 1 1 +( -16 -256 112 ) ( -17 -256 112 ) ( -16 -255 112 ) orangestuff8 [ -1 0 0 16 ] [ 0 -1 0 16 ] 180 1 1 +( -16 -144 112 ) ( -16 -144 113 ) ( -17 -144 112 ) orangestuff8 [ 1 0 0 -16 ] [ 0 0 -1 0 ] 180 1 1 +( 80 -576 96 ) ( 80 -576 97 ) ( 80 -575 96 ) orangestuff8 [ 0 -1 0 16 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 1 +{ +( -16 -352 112 ) ( -16 -351 112 ) ( -16 -352 113 ) orangestuff8 [ 0 1 0 16 ] [ 0 0 -1 0 ] 0 1 1 +( 16 -336 96 ) ( 15 -336 96 ) ( 16 -336 97 ) orangestuff8 [ -1 0 0 -32 ] [ 0 0 -1 0 ] 180 1 1 +( 16 -672 80 ) ( 16 -671 80 ) ( 15 -672 80 ) orangestuff8 [ 1 0 0 32 ] [ 0 -1 0 -16 ] 180 1 1 +( -64 -352 112 ) ( -65 -352 112 ) ( -64 -351 112 ) orangestuff8 [ -1 0 0 -32 ] [ 0 -1 0 -16 ] 180 1 1 +( -64 -240 112 ) ( -64 -240 113 ) ( -65 -240 112 ) orangestuff8 [ 1 0 0 32 ] [ 0 0 -1 0 ] 180 1 1 +( 32 -672 96 ) ( 32 -672 97 ) ( 32 -671 96 ) orangestuff8 [ 0 -1 0 -16 ] [ 0 0 -1 0 ] 0 1 1 +} +} +// entity 1 +{ +"classname" "info_player_start" +"origin" "56 -208 136" +}