Skip to content

Commit 4b3b7db

Browse files
committed
cmake: build math_opt elemental C++ tests
* add test to elemental_test.cc
1 parent 4af47e6 commit 4b3b7db

2 files changed

Lines changed: 62 additions & 0 deletions

File tree

ortools/math_opt/elemental/CMakeLists.txt

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,43 @@ target_link_libraries(${NAME} PRIVATE
2828
${PROJECT_NAMESPACE}::math_opt_proto
2929
absl::strings
3030
)
31+
32+
ortools_cxx_library(
33+
NAME
34+
math_opt_elemental_matcher
35+
SOURCES
36+
"elemental_matcher.cc"
37+
"elemental_matcher.h"
38+
TYPE
39+
STATIC
40+
LINK_LIBRARIES
41+
absl::log
42+
absl::status
43+
absl::strings
44+
GTest::gmock
45+
TESTING
46+
)
47+
48+
if(BUILD_TESTING)
49+
file(GLOB _TEST_SRCS "*_test.cc")
50+
list(FILTER _TEST_SRCS
51+
EXCLUDE REGEX "elemental_export_model_update_test.cc$")
52+
list(FILTER _TEST_SRCS
53+
EXCLUDE REGEX "elemental_from_proto_fuzz_test.cc$") # need fuzztest
54+
foreach(_FULL_FILE_NAME IN LISTS _TEST_SRCS)
55+
get_filename_component(_NAME ${_FULL_FILE_NAME} NAME_WE)
56+
get_filename_component(_FILE_NAME ${_FULL_FILE_NAME} NAME)
57+
ortools_cxx_test(
58+
NAME
59+
math_opt_elemental_${_NAME}
60+
SOURCES
61+
${_FILE_NAME}
62+
LINK_LIBRARIES
63+
benchmark::benchmark
64+
GTest::gmock
65+
GTest::gtest_main
66+
ortools::math_opt_matchers
67+
ortools::math_opt_elemental_matcher
68+
)
69+
endforeach()
70+
endif()

ortools/math_opt/elemental/elemental_test.cc

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,28 @@ TEST(ElementalTest, Attr2RespondsToElementDeletionKey1) {
453453
EXPECT_THAT(elemental.AttrNonDefaults(DoubleAttr2::kLinConCoef), IsEmpty());
454454
}
455455

456+
TEST(ElementalTest, SymmetricAttr2) {
457+
using Key = AttrKeyFor<SymmetricDoubleAttr2>;
458+
Elemental elemental;
459+
const VariableId x0 = elemental.AddElement<ElementType::kVariable>("x1");
460+
const VariableId x1 = elemental.AddElement<ElementType::kVariable>("x2");
461+
const VariableId x2 = elemental.AddElement<ElementType::kVariable>("x3");
462+
463+
const auto q01 = Key(x0, x1);
464+
const auto q21 = Key(x2, x1);
465+
const auto q12 = Key(x1, x2);
466+
467+
elemental.SetAttr(SymmetricDoubleAttr2::kObjQuadCoef, q01, 42.0);
468+
elemental.SetAttr(SymmetricDoubleAttr2::kObjQuadCoef, q21, 43.0);
469+
elemental.SetAttr(SymmetricDoubleAttr2::kObjQuadCoef, q12, 44.0);
470+
471+
EXPECT_EQ(elemental.AttrNumNonDefaults(SymmetricDoubleAttr2::kObjQuadCoef),
472+
2);
473+
474+
EXPECT_THAT(elemental.AttrNonDefaults(SymmetricDoubleAttr2::kObjQuadCoef),
475+
UnorderedElementsAre(q01, q12));
476+
}
477+
456478
TEST(ElementalTest, SymmetricAttr2RespondsToElementDeletionKey0) {
457479
using Key = AttrKeyFor<SymmetricDoubleAttr2>;
458480
Elemental elemental;

0 commit comments

Comments
 (0)