From 407dcb39d450b8eb103ceb7566f8d192e5c876d7 Mon Sep 17 00:00:00 2001 From: Mattias Fredriksson Date: Mon, 16 Jun 2025 20:31:00 +0200 Subject: [PATCH] Tests: EXPECT_EQ_SPAN utility macro Replaces pointer based EXPECT_EQ_ARRAY with EXPECT_EQ_SPAN in most cases as they already used spans (or span compatible datastructures). Currently EXPECT_EQ_ARRAY only takes in one size variable and doesn't compare the number of elements between arguments (requiring an additional line to do so). This should make the code cleaner and safer. Goal is also to promote the use Spans in new test code. Pull Request: https://projects.blender.org/blender/blender/pulls/140340 --- .../blenkernel/intern/curves_geometry_test.cc | 37 ++++++--------- .../blender/blenlib/tests/BLI_array_test.cc | 4 +- source/blender/blenlib/tests/BLI_span_test.cc | 14 +++--- .../blender/blenlib/tests/BLI_vector_test.cc | 16 +++---- source/blender/draw/tests/eevee_test.cc | 6 +-- .../geometry/tests/GEO_merge_curves_test.cc | 46 +++++++++---------- .../blender/gpu/tests/storage_buffer_test.cc | 10 ++-- .../io/ply/tests/io_ply_importer_test.cc | 6 +-- tests/gtests/testing/testing.h | 19 ++++++++ 9 files changed, 82 insertions(+), 76 deletions(-) diff --git a/source/blender/blenkernel/intern/curves_geometry_test.cc b/source/blender/blenkernel/intern/curves_geometry_test.cc index 8a6d0f16204..2d956a43567 100644 --- a/source/blender/blenkernel/intern/curves_geometry_test.cc +++ b/source/blender/blenkernel/intern/curves_geometry_test.cc @@ -482,28 +482,26 @@ TEST(knot_vector, KnotVectorUniform) { constexpr int8_t order = 5; constexpr int points_num = 7; - constexpr std::array expectation{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; Vector knots(curves::nurbs::knots_num(points_num, order, false)); curves::nurbs::calculate_knots( points_num, KnotsMode::NURBS_KNOT_MODE_NORMAL, order, false, knots); const Vector multiplicity = curves::nurbs::calculate_multiplicity_sequence(knots); - EXPECT_EQ_ARRAY(expectation.data(), multiplicity.data(), expectation.size()); + EXPECT_EQ_SPAN(Span({1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}), multiplicity); } TEST(knot_vector, KnotVectorUniformClamped) { constexpr int8_t order = 3; constexpr int points_num = 7; - constexpr std::array expectation{3, 1, 1, 1, 1, 3}; Vector knots(curves::nurbs::knots_num(points_num, order, false)); curves::nurbs::calculate_knots( points_num, KnotsMode::NURBS_KNOT_MODE_ENDPOINT, order, false, knots); const Vector multiplicity = curves::nurbs::calculate_multiplicity_sequence(knots); - EXPECT_EQ_ARRAY(expectation.data(), multiplicity.data(), expectation.size()); + EXPECT_EQ_SPAN(Span({3, 1, 1, 1, 1, 3}), multiplicity); } /* -------------------------------------------------------------------- */ @@ -514,70 +512,65 @@ TEST(knot_vector, KnotVectorBezierClampedSegmentDeg2) { constexpr int8_t order = 3; constexpr int points_num = 3; - constexpr std::array expectation{3, 3}; Vector knots(curves::nurbs::knots_num(points_num, order, false)); curves::nurbs::calculate_knots( points_num, KnotsMode::NURBS_KNOT_MODE_ENDPOINT_BEZIER, order, false, knots); const Vector multiplicity = curves::nurbs::calculate_multiplicity_sequence(knots); - EXPECT_EQ_ARRAY(expectation.data(), multiplicity.data(), expectation.size()); + EXPECT_EQ_SPAN(Span({3, 3}), multiplicity); } TEST(knot_vector, KnotVectorBezierClampedSegmentDeg4) { constexpr int8_t order = 5; constexpr int points_num = 5; - constexpr std::array expectation{5, 5}; Vector knots(curves::nurbs::knots_num(points_num, order, false)); curves::nurbs::calculate_knots( points_num, KnotsMode::NURBS_KNOT_MODE_ENDPOINT_BEZIER, order, false, knots); const Vector multiplicity = curves::nurbs::calculate_multiplicity_sequence(knots); - EXPECT_EQ_ARRAY(expectation.data(), multiplicity.data(), expectation.size()); + EXPECT_EQ_SPAN(Span({5, 5}), multiplicity); } TEST(knot_vector, KnotVectorBezierClampedDeg2) { constexpr int8_t order = 3; constexpr int points_num = 9; - constexpr std::array expectation{3, 2, 2, 2, 3}; Vector knots(curves::nurbs::knots_num(points_num, order, false)); curves::nurbs::calculate_knots( points_num, KnotsMode::NURBS_KNOT_MODE_ENDPOINT_BEZIER, order, false, knots); const Vector multiplicity = curves::nurbs::calculate_multiplicity_sequence(knots); - EXPECT_EQ_ARRAY(expectation.data(), multiplicity.data(), expectation.size()); + EXPECT_EQ_SPAN(Span({3, 2, 2, 2, 3}), multiplicity); } TEST(knot_vector, KnotVectorBezierClampedUnevenDeg2) { constexpr int8_t order = 3; constexpr int points_num = 8; - constexpr std::array expectation{3, 2, 2, 4}; Vector knots(curves::nurbs::knots_num(points_num, order, false)); curves::nurbs::calculate_knots( points_num, KnotsMode::NURBS_KNOT_MODE_ENDPOINT_BEZIER, order, false, knots); const Vector multiplicity = curves::nurbs::calculate_multiplicity_sequence(knots); - EXPECT_EQ_ARRAY(expectation.data(), multiplicity.data(), expectation.size()); + EXPECT_EQ_SPAN(Span({3, 2, 2, 4}), multiplicity); } TEST(knot_vector, KnotVectorBezierClampedDeg4) { constexpr int8_t order = 5; constexpr int points_num = 13; - constexpr std::array expectation{5, 4, 4, 5}; Vector knots(curves::nurbs::knots_num(points_num, order, false)); curves::nurbs::calculate_knots( points_num, KnotsMode::NURBS_KNOT_MODE_ENDPOINT_BEZIER, order, false, knots); const Vector multiplicity = curves::nurbs::calculate_multiplicity_sequence(knots); - EXPECT_EQ_ARRAY(expectation.data(), multiplicity.data(), expectation.size()); + EXPECT_EQ_SPAN(Span({5, 4, 4, 5}), multiplicity); } TEST(knot_vector, KnotVectorBezierClampedUnevenDeg4) @@ -595,7 +588,7 @@ TEST(knot_vector, KnotVectorBezierClampedUnevenDeg4) points_num[i], KnotsMode::NURBS_KNOT_MODE_ENDPOINT_BEZIER, order, false, knots); const Vector multiplicity = curves::nurbs::calculate_multiplicity_sequence(knots); - EXPECT_EQ_ARRAY(expectation[i].data(), multiplicity.data(), multiplicity.size()); + EXPECT_EQ_SPAN(Span(expectation[i]), multiplicity); } } @@ -603,14 +596,13 @@ TEST(knot_vector, KnotVectorCircleCyclicUnevenDeg2) { constexpr int8_t order = 3; constexpr int points_num = 8; - constexpr std::array expectation{1, 2, 2, 2, 2, 2, 2}; Vector knots(curves::nurbs::knots_num(points_num, order, true)); curves::nurbs::calculate_knots( points_num, KnotsMode::NURBS_KNOT_MODE_ENDPOINT_BEZIER, order, true, knots); const Vector multiplicity = curves::nurbs::calculate_multiplicity_sequence(knots); - EXPECT_EQ_ARRAY(expectation.data(), multiplicity.data(), expectation.size()); + EXPECT_EQ_SPAN(Span({1, 2, 2, 2, 2, 2, 2}), multiplicity); } TEST(knot_vector, KnotVectorBezierClampedCyclicUnevenDeg4) @@ -628,7 +620,7 @@ TEST(knot_vector, KnotVectorBezierClampedCyclicUnevenDeg4) points_num[i], KnotsMode::NURBS_KNOT_MODE_ENDPOINT_BEZIER, order, true, knots); const Vector multiplicity = curves::nurbs::calculate_multiplicity_sequence(knots); - EXPECT_EQ_ARRAY(expectation[i].data(), multiplicity.data(), multiplicity.size()); + EXPECT_EQ_SPAN(Span(expectation[i]), multiplicity); } } @@ -642,14 +634,13 @@ TEST(knot_vector, KnotVectorBezierSegmentDeg2) { constexpr int8_t order = 4; constexpr int points_num = 4; - constexpr std::array expectation{2, 3, 3}; Vector knots(curves::nurbs::knots_num(points_num, order, false)); curves::nurbs::calculate_knots( points_num, KnotsMode::NURBS_KNOT_MODE_BEZIER, order, false, knots); const Vector multiplicity = curves::nurbs::calculate_multiplicity_sequence(knots); - EXPECT_EQ_ARRAY(expectation.data(), multiplicity.data(), expectation.size()); + EXPECT_EQ_SPAN(Span({2, 3, 3}), multiplicity); } TEST(knot_vector, KnotVectorBezierUnevenDeg2) @@ -667,7 +658,7 @@ TEST(knot_vector, KnotVectorBezierUnevenDeg2) points_num[i], KnotsMode::NURBS_KNOT_MODE_BEZIER, order, false, knots); const Vector multiplicity = curves::nurbs::calculate_multiplicity_sequence(knots); - EXPECT_EQ_ARRAY(expectation[i].data(), multiplicity.data(), multiplicity.size()); + EXPECT_EQ_SPAN(Span(expectation[i].data(), multiplicity.size()), multiplicity); } } @@ -688,7 +679,7 @@ TEST(knot_vector, KnotVectorBezierUnevenDeg4) points_num[i], KnotsMode::NURBS_KNOT_MODE_BEZIER, order, false, knots); const Vector multiplicity = curves::nurbs::calculate_multiplicity_sequence(knots); - EXPECT_EQ_ARRAY(expectation[i].data(), multiplicity.data(), multiplicity.size()); + EXPECT_EQ_SPAN(Span(expectation[i].data(), multiplicity.size()), multiplicity); } } @@ -707,7 +698,7 @@ TEST(knot_vector, KnotVectorBezierCyclicUnevenDeg4) points_num[i], KnotsMode::NURBS_KNOT_MODE_BEZIER, order, true, knots); const Vector multiplicity = curves::nurbs::calculate_multiplicity_sequence(knots); - EXPECT_EQ_ARRAY(expectation[i].data(), multiplicity.data(), multiplicity.size()); + EXPECT_EQ_SPAN(Span(expectation[i].data(), multiplicity.size()), multiplicity); } } diff --git a/source/blender/blenlib/tests/BLI_array_test.cc b/source/blender/blenlib/tests/BLI_array_test.cc index 056a8b9542c..c0fcf1b92bc 100644 --- a/source/blender/blenlib/tests/BLI_array_test.cc +++ b/source/blender/blenlib/tests/BLI_array_test.cc @@ -189,8 +189,8 @@ TEST(array, ReverseIterator) *it += 10; } - EXPECT_EQ_ARRAY(reversed_vec.data(), Span({6, 5, 4, 3}).data(), 4); - EXPECT_EQ_ARRAY(array.data(), Span({13, 14, 15, 16}).data(), 4); + EXPECT_EQ_SPAN(reversed_vec, Span({6, 5, 4, 3})); + EXPECT_EQ_SPAN(array, Span({13, 14, 15, 16})); } TEST(array, SpanConstructorExceptions) diff --git a/source/blender/blenlib/tests/BLI_span_test.cc b/source/blender/blenlib/tests/BLI_span_test.cc index bec6f67c591..6fe9e8d42ed 100644 --- a/source/blender/blenlib/tests/BLI_span_test.cc +++ b/source/blender/blenlib/tests/BLI_span_test.cc @@ -367,7 +367,7 @@ TEST(span, ReverseIterator) reversed_vec.append(*it); } EXPECT_EQ(reversed_vec.size(), 4); - EXPECT_EQ_ARRAY(reversed_vec.data(), Span({7, 6, 5, 4}).data(), 4); + EXPECT_EQ_SPAN(reversed_vec, Span({7, 6, 5, 4})); } TEST(span, ReverseMutableSpan) @@ -375,22 +375,22 @@ TEST(span, ReverseMutableSpan) std::array src0 = {}; MutableSpan span0 = src0; span0.reverse(); - EXPECT_EQ_ARRAY(span0.data(), Span({}).data(), 0); + EXPECT_EQ_SPAN(span0, Span({})); std::array src1 = {4}; MutableSpan span1 = src1; span1.reverse(); - EXPECT_EQ_ARRAY(span1.data(), Span({4}).data(), 1); + EXPECT_EQ_SPAN(span1, Span({4})); std::array src2 = {4, 5}; MutableSpan span2 = src2; span2.reverse(); - EXPECT_EQ_ARRAY(span2.data(), Span({5, 4}).data(), 2); + EXPECT_EQ_SPAN(span2, Span({5, 4})); std::array src5 = {4, 5, 6, 7, 8}; MutableSpan span5 = src5; span5.reverse(); - EXPECT_EQ_ARRAY(span5.data(), Span({8, 7, 6, 5, 4}).data(), 5); + EXPECT_EQ_SPAN(span5, Span({8, 7, 6, 5, 4})); } TEST(span, MutableReverseIterator) @@ -404,8 +404,8 @@ TEST(span, MutableReverseIterator) *it += 10; } EXPECT_EQ(reversed_vec.size(), 4); - EXPECT_EQ_ARRAY(reversed_vec.data(), Span({7, 6, 5, 4}).data(), 4); - EXPECT_EQ_ARRAY(src.data(), Span({14, 15, 16, 17}).data(), 4); + EXPECT_EQ_SPAN(reversed_vec, Span({7, 6, 5, 4})); + EXPECT_EQ_SPAN(src, Span({14, 15, 16, 17})); } TEST(span, Constexpr) diff --git a/source/blender/blenlib/tests/BLI_vector_test.cc b/source/blender/blenlib/tests/BLI_vector_test.cc index 7a13fc6126c..3a9631a6293 100644 --- a/source/blender/blenlib/tests/BLI_vector_test.cc +++ b/source/blender/blenlib/tests/BLI_vector_test.cc @@ -299,7 +299,7 @@ TEST(vector, ExtendIterator) std::forward_list list = {8, 9}; vec.extend(list.begin(), list.end()); EXPECT_EQ(vec.size(), 5); - EXPECT_EQ_ARRAY(vec.data(), Span({3, 4, 5, 8, 9}).data(), 5); + EXPECT_EQ_SPAN(vec, Span({3, 4, 5, 8, 9})); } TEST(vector, Iterator) @@ -429,7 +429,7 @@ TEST(vector, RemoveIf) EXPECT_EQ(vec.size() + removed, 8); const Vector expected_vec = {1, 3, 5, 7}; EXPECT_EQ(vec.size(), expected_vec.size()); - EXPECT_EQ_ARRAY(vec.data(), expected_vec.data(), size_t(vec.size())); + EXPECT_EQ_SPAN(vec, expected_vec); } TEST(vector, RemoveIfNonTrivialDestructible) @@ -746,7 +746,7 @@ TEST(vector, InsertAtBeginning) Vector vec = {1, 2, 3}; vec.insert(0, {6, 7}); EXPECT_EQ(vec.size(), 5); - EXPECT_EQ_ARRAY(vec.data(), Span({6, 7, 1, 2, 3}).data(), 5); + EXPECT_EQ_SPAN(vec, Span({6, 7, 1, 2, 3})); } TEST(vector, InsertAtEnd) @@ -754,7 +754,7 @@ TEST(vector, InsertAtEnd) Vector vec = {1, 2, 3}; vec.insert(3, {6, 7}); EXPECT_EQ(vec.size(), 5); - EXPECT_EQ_ARRAY(vec.data(), Span({1, 2, 3, 6, 7}).data(), 5); + EXPECT_EQ_SPAN(vec, Span({1, 2, 3, 6, 7})); } TEST(vector, InsertInMiddle) @@ -762,7 +762,7 @@ TEST(vector, InsertInMiddle) Vector vec = {1, 2, 3}; vec.insert(1, {6, 7}); EXPECT_EQ(vec.size(), 5); - EXPECT_EQ_ARRAY(vec.data(), Span({1, 6, 7, 2, 3}).data(), 5); + EXPECT_EQ_SPAN(vec, Span({1, 6, 7, 2, 3})); } TEST(vector, InsertAtIterator) @@ -771,7 +771,7 @@ TEST(vector, InsertAtIterator) Vector other_vec = {"hello", "world"}; vec.insert(vec.begin() + 1, other_vec.begin(), other_vec.end()); EXPECT_EQ(vec.size(), 5); - EXPECT_EQ_ARRAY(vec.data(), Span({"1", "hello", "world", "2", "3"}).data(), 5); + EXPECT_EQ_SPAN(vec, Span({"1", "hello", "world", "2", "3"})); } TEST(vector, InsertMoveOnlyType) @@ -791,7 +791,7 @@ TEST(vector, Prepend) Vector vec = {1, 2, 3}; vec.prepend({7, 8}); EXPECT_EQ(vec.size(), 5); - EXPECT_EQ_ARRAY(vec.data(), Span({7, 8, 1, 2, 3}).data(), 5); + EXPECT_EQ_SPAN(vec, Span({7, 8, 1, 2, 3})); } TEST(vector, PrependString) @@ -813,7 +813,7 @@ TEST(vector, ReverseIterator) reversed_vec.append(*it); } EXPECT_EQ(reversed_vec.size(), 4); - EXPECT_EQ_ARRAY(reversed_vec.data(), Span({7, 6, 5, 4}).data(), 4); + EXPECT_EQ_SPAN(reversed_vec, Span({7, 6, 5, 4})); } TEST(vector, SizeValueConstructorExceptions) diff --git a/source/blender/draw/tests/eevee_test.cc b/source/blender/draw/tests/eevee_test.cc index a45852709b9..22143cca622 100644 --- a/source/blender/draw/tests/eevee_test.cc +++ b/source/blender/draw/tests/eevee_test.cc @@ -1920,10 +1920,10 @@ static void test_eevee_surfel_list() // Span(list_start_buf.data(), expect_list_start.size()).print_as_lines("list_start"); // link_next.as_span().print_as_lines("link_next"); // link_prev.as_span().print_as_lines("link_prev"); - EXPECT_EQ_ARRAY(expect_list_start.data(), list_start_buf.data(), expect_list_start.size()); + EXPECT_EQ_SPAN(expect_list_start, list_start_buf); #endif - EXPECT_EQ_ARRAY(expect_link_next.data(), link_next.data(), expect_link_next.size()); - EXPECT_EQ_ARRAY(expect_link_prev.data(), link_prev.data(), expect_link_prev.size()); + EXPECT_EQ_SPAN(expect_link_next, link_next); + EXPECT_EQ_SPAN(expect_link_prev, link_prev); GPU_shader_unbind(); diff --git a/source/blender/geometry/tests/GEO_merge_curves_test.cc b/source/blender/geometry/tests/GEO_merge_curves_test.cc index 60a3842b08c..86a5503cee5 100644 --- a/source/blender/geometry/tests/GEO_merge_curves_test.cc +++ b/source/blender/geometry/tests/GEO_merge_curves_test.cc @@ -49,8 +49,8 @@ TEST(merge_curves, NoConnections) EXPECT_EQ(dst_curves.points_num(), 12); EXPECT_EQ(dst_curves.curves_num(), 4); - EXPECT_EQ_ARRAY(Span({0, 3, 6, 9, 12}).data(), dst_curves.offsets().data(), 5); - EXPECT_EQ_ARRAY(Span({false, true, true, false}).data(), cyclic.data(), 4); + EXPECT_EQ_SPAN(Span({0, 3, 6, 9, 12}), dst_curves.offsets()); + EXPECT_EQ_SPAN(Span({false, true, true, false}), cyclic); } TEST(merge_curves, ConnectSingleCurve) @@ -68,9 +68,9 @@ TEST(merge_curves, ConnectSingleCurve) EXPECT_EQ(dst_curves.points_num(), 12); EXPECT_EQ(dst_curves.curves_num(), 3); - EXPECT_EQ_ARRAY(Span({0, 3, 6, 12}).data(), dst_curves.offsets().data(), 4); - EXPECT_EQ_ARRAY(Span({false, true, false}).data(), cyclic.data(), 3); - EXPECT_EQ_ARRAY(Span({0, 1, 2, 6, 7, 8, 9, 10, 11, 3, 4, 5}).data(), dst_indices.data(), 12); + EXPECT_EQ_SPAN(Span({0, 3, 6, 12}), dst_curves.offsets()); + EXPECT_EQ_SPAN(Span({false, true, false}), cyclic); + EXPECT_EQ_SPAN(Span({0, 1, 2, 6, 7, 8, 9, 10, 11, 3, 4, 5}), dst_indices); } TEST(merge_curves, ReverseCurves) @@ -88,9 +88,9 @@ TEST(merge_curves, ReverseCurves) EXPECT_EQ(dst_curves.points_num(), 12); EXPECT_EQ(dst_curves.curves_num(), 4); - EXPECT_EQ_ARRAY(Span({0, 3, 6, 9, 12}).data(), dst_curves.offsets().data(), 5); - EXPECT_EQ_ARRAY(Span({false, true, true, false}).data(), cyclic.data(), 3); - EXPECT_EQ_ARRAY(Span({0, 1, 2, 5, 4, 3, 6, 7, 8, 11, 10, 9}).data(), dst_indices.data(), 12); + EXPECT_EQ_SPAN(Span({0, 3, 6, 9, 12}), dst_curves.offsets()); + EXPECT_EQ_SPAN(Span({false, true, true, false}), cyclic); + EXPECT_EQ_SPAN(Span({0, 1, 2, 5, 4, 3, 6, 7, 8, 11, 10, 9}), dst_indices); } TEST(merge_curves, ConnectAndReverseCurves) @@ -108,9 +108,9 @@ TEST(merge_curves, ConnectAndReverseCurves) EXPECT_EQ(dst_curves.points_num(), 12); EXPECT_EQ(dst_curves.curves_num(), 2); - EXPECT_EQ_ARRAY(Span({0, 9, 12}).data(), dst_curves.offsets().data(), 3); - EXPECT_EQ_ARRAY(Span({false, true}).data(), cyclic.data(), 2); - EXPECT_EQ_ARRAY(Span({3, 4, 5, 2, 1, 0, 9, 10, 11, 8, 7, 6}).data(), dst_indices.data(), 12); + EXPECT_EQ_SPAN(Span({0, 9, 12}), dst_curves.offsets()); + EXPECT_EQ_SPAN(Span({false, true}), cyclic); + EXPECT_EQ_SPAN(Span({3, 4, 5, 2, 1, 0, 9, 10, 11, 8, 7, 6}), dst_indices); } TEST(merge_curves, CyclicConnection) @@ -128,9 +128,9 @@ TEST(merge_curves, CyclicConnection) EXPECT_EQ(dst_curves.points_num(), 12); EXPECT_EQ(dst_curves.curves_num(), 3); - EXPECT_EQ_ARRAY(Span({0, 3, 9, 12}).data(), dst_curves.offsets().data(), 4); - EXPECT_EQ_ARRAY(Span({false, true, true}).data(), cyclic.data(), 3); - EXPECT_EQ_ARRAY(Span({0, 1, 2, 3, 4, 5, 9, 10, 11, 6, 7, 8}).data(), dst_indices.data(), 12); + EXPECT_EQ_SPAN(Span({0, 3, 9, 12}), dst_curves.offsets()); + EXPECT_EQ_SPAN(Span({false, true, true}), cyclic); + EXPECT_EQ_SPAN(Span({0, 1, 2, 3, 4, 5, 9, 10, 11, 6, 7, 8}), dst_indices); } TEST(merge_curves, SelfConnectCurve) @@ -148,9 +148,9 @@ TEST(merge_curves, SelfConnectCurve) EXPECT_EQ(dst_curves.points_num(), 12); EXPECT_EQ(dst_curves.curves_num(), 4); - EXPECT_EQ_ARRAY(Span({0, 3, 6, 9, 12}).data(), dst_curves.offsets().data(), 5); - EXPECT_EQ_ARRAY(Span({false, true, true, false}).data(), cyclic.data(), 4); - EXPECT_EQ_ARRAY(Span({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}).data(), dst_indices.data(), 12); + EXPECT_EQ_SPAN(Span({0, 3, 6, 9, 12}), dst_curves.offsets()); + EXPECT_EQ_SPAN(Span({false, true, true, false}), cyclic); + EXPECT_EQ_SPAN(Span({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}), dst_indices); } TEST(merge_curves, MergeAll) @@ -168,9 +168,9 @@ TEST(merge_curves, MergeAll) EXPECT_EQ(dst_curves.points_num(), 12); EXPECT_EQ(dst_curves.curves_num(), 1); - EXPECT_EQ_ARRAY(Span({0, 12}).data(), dst_curves.offsets().data(), 2); - EXPECT_EQ_ARRAY(Span({true}).data(), cyclic.data(), 1); - EXPECT_EQ_ARRAY(Span({0, 1, 2, 6, 7, 8, 9, 10, 11, 3, 4, 5}).data(), dst_indices.data(), 12); + EXPECT_EQ_SPAN(Span({0, 12}), dst_curves.offsets()); + EXPECT_EQ_SPAN(Span({true}), cyclic); + EXPECT_EQ_SPAN(Span({0, 1, 2, 6, 7, 8, 9, 10, 11, 3, 4, 5}), dst_indices); } TEST(merge_curves, Branching) @@ -189,9 +189,9 @@ TEST(merge_curves, Branching) EXPECT_EQ(dst_curves.points_num(), 12); EXPECT_EQ(dst_curves.curves_num(), 3); - EXPECT_EQ_ARRAY(Span({0, 6, 9, 12}).data(), dst_curves.offsets().data(), 4); - EXPECT_EQ_ARRAY(Span({false, false, false}).data(), cyclic.data(), 3); - EXPECT_EQ_ARRAY(Span({0, 1, 2, 6, 7, 8, 3, 4, 5, 9, 10, 11}).data(), dst_indices.data(), 12); + EXPECT_EQ_SPAN(Span({0, 6, 9, 12}), dst_curves.offsets()); + EXPECT_EQ_SPAN(Span({false, false, false}), cyclic); + EXPECT_EQ_SPAN(Span({0, 1, 2, 6, 7, 8, 3, 4, 5, 9, 10, 11}), dst_indices); } } // namespace blender::geometry::tests diff --git a/source/blender/gpu/tests/storage_buffer_test.cc b/source/blender/gpu/tests/storage_buffer_test.cc index 9332d0f2919..b951ab7ce0c 100644 --- a/source/blender/gpu/tests/storage_buffer_test.cc +++ b/source/blender/gpu/tests/storage_buffer_test.cc @@ -149,7 +149,7 @@ static void test_storage_buffer_copy_from_vertex_buffer() for (int i : IndexRange(4)) { GPU_vertbuf_vert_set(vbo, i, &data[i]); } - float *expected_data = static_cast(static_cast(&data)); + Span expected_data(static_cast(static_cast(&data)), 24); Vector read_data; read_data.resize(SIZE, 0); @@ -161,7 +161,7 @@ static void test_storage_buffer_copy_from_vertex_buffer() /* Validate content of SSBO. */ GPU_storagebuf_read(ssbo, read_data.data()); - EXPECT_EQ_ARRAY(expected_data, read_data.data(), 24); + EXPECT_EQ_SPAN(expected_data, read_data); for (int i : IndexRange(24, SIZE - 24)) { EXPECT_EQ(0.0, read_data[i]); } @@ -177,8 +177,7 @@ static void test_storage_buffer_copy_from_vertex_buffer() for (int i : IndexRange(4)) { EXPECT_EQ(0.0, read_data[i]); } - float *expected_data = static_cast(static_cast(&data)); - EXPECT_EQ_ARRAY(expected_data, &(read_data.data()[4]), 24); + EXPECT_EQ_SPAN(expected_data, read_data.as_span().slice(4, 24)); for (int i : IndexRange(28, SIZE - 28)) { EXPECT_EQ(0.0, read_data[i]); } @@ -194,8 +193,7 @@ static void test_storage_buffer_copy_from_vertex_buffer() for (int i : IndexRange(4)) { EXPECT_EQ(0.0, read_data[i]); } - float *expected_data = static_cast(static_cast(&data)); - EXPECT_EQ_ARRAY(&expected_data[6], &(read_data.data()[4]), 12); + EXPECT_EQ_SPAN(expected_data.slice(6, 12), read_data.as_span().slice(4, 12)); for (int i : IndexRange(16, SIZE - 16)) { EXPECT_EQ(0.0, read_data[i]); } diff --git a/source/blender/io/ply/tests/io_ply_importer_test.cc b/source/blender/io/ply/tests/io_ply_importer_test.cc index 6807ca4e0b4..f91f7c50df3 100644 --- a/source/blender/io/ply/tests/io_ply_importer_test.cc +++ b/source/blender/io/ply/tests/io_ply_importer_test.cc @@ -56,10 +56,8 @@ TEST(ply_import, BufferRefillTest) {5, 4}, {0, 4}, {5, 1}}; - EXPECT_EQ(12, data_a->edges.size()); - EXPECT_EQ(12, data_b->edges.size()); - EXPECT_EQ_ARRAY(exp_edges, data_a->edges.data(), 12); - EXPECT_EQ_ARRAY(exp_edges, data_b->edges.data(), 12); + EXPECT_EQ_SPAN>(Span(exp_edges, 12), data_a->edges); + EXPECT_EQ_SPAN>(Span(exp_edges, 12), data_b->edges); } //@TODO: now we put vertex color attribute first, maybe put position first? diff --git a/tests/gtests/testing/testing.h b/tests/gtests/testing/testing.h index 04c3f7cd20f..861afceacd5 100644 --- a/tests/gtests/testing/testing.h +++ b/tests/gtests/testing/testing.h @@ -10,6 +10,14 @@ #include // IWYU pragma: export #include // IWYU pragma: export +/* Fwd. + */ +namespace blender { + +template class Span; + +} // namespace blender + namespace blender::tests { /* These strings are passed on the CLI with the --test-asset-dir and --test-release-dir arguments. @@ -134,6 +142,17 @@ inline void EXPECT_EQ_VECTOR(const std::vector &expected, const std::vector +inline void EXPECT_EQ_SPAN(const blender::Span expected, const blender::Span actual) +{ + EXPECT_EQ(expected.size(), actual.size()); + if (expected.size() == actual.size()) { + for (const int64_t i : expected.index_range()) { + EXPECT_EQ(expected[i], actual[i]) << "Element mismatch at index " << i; + } + } +} + template inline void EXPECT_EQ_ARRAY(const T *expected, const T *actual, const size_t N) {