6TEST(NeutralECRemover, SimpleModelTest) {
33 ASSERT_NO_THROW(matrix = builder.
build());
36 subsystem.
set(2,
false);
39 possibleEcRows.
set(3,
false);
40 possibleEcRows.
set(6,
false);
41 possibleEcRows.
set(7,
false);
42 possibleEcRows.
set(8,
false);
43 possibleEcRows.
set(11,
false);
46 allowEmptyRows.
set(1,
false);
47 allowEmptyRows.
set(4,
false);
58 ASSERT_NO_THROW(expectedBuilder.
addNextValue(0, 1, 1.0));
59 ASSERT_NO_THROW(expectedBuilder.
addNextValue(2, 0, 1.0));
61 ASSERT_NO_THROW(expectedBuilder.
addNextValue(3, 0, 0.3));
62 ASSERT_NO_THROW(expectedBuilder.
addNextValue(3, 1, 0.7));
63 ASSERT_NO_THROW(expectedBuilder.
addNextValue(4, 1, 1.0));
64 ASSERT_NO_THROW(expectedBuilder.
addNextValue(5, 0, 1.0));
66 ASSERT_NO_THROW(expectedBuilder.
addNextValue(6, 0, 0.4));
67 ASSERT_NO_THROW(expectedBuilder.
addNextValue(6, 1, 0.5));
69 ASSERT_NO_THROW(expectedMatrix = expectedBuilder.
build());
70 std::vector<uint_fast64_t> expectedNewToOldRowMapping = {6, 7, 8, 2, 3, 11, 1, 0};
71 std::vector<uint_fast64_t> expectedOldToNewStateMapping = {2, 1, std::numeric_limits<uint_fast64_t>::max(), 0, 1};
84 EXPECT_EQ(expectedMatrix.
getRowCount(), res.matrix.getRowCount());
86 EXPECT_EQ(expectedMatrix.
getColumnCount(), res.matrix.getColumnCount());
87 EXPECT_EQ(expectedNewToOldRowMapping.size(), res.newToOldRowMapping.size());
88 EXPECT_EQ(expectedOldToNewStateMapping.size(), res.oldToNewStateMapping.size());
90 std::vector<uint64_t> actualToExpectedStateMapping(res.matrix.getRowGroupCount());
91 for (uint64_t oldState = 0; oldState < expectedOldToNewStateMapping.size(); ++oldState) {
92 uint64_t expectedNewState = expectedOldToNewStateMapping[oldState];
93 uint64_t actualNewState = res.oldToNewStateMapping[oldState];
94 if (actualNewState < std::numeric_limits<uint_fast64_t>::max()) {
95 ASSERT_LT(expectedNewState, std::numeric_limits<uint_fast64_t>::max()) <<
" Mapping does not match for oldState " << oldState;
96 actualToExpectedStateMapping[actualNewState] = expectedNewState;
98 ASSERT_EQ(expectedNewState, actualNewState) <<
" Mapping does not match for oldState " << oldState;
101 std::vector<uint64_t> actualToExpectedRowMapping;
102 for (uint64_t actualRow = 0; actualRow < res.matrix.getRowCount(); ++actualRow) {
104 for (uint64_t expectedRow = 0; expectedRow < expectedMatrix.
getRowCount(); ++expectedRow) {
105 if (res.newToOldRowMapping[actualRow] == expectedNewToOldRowMapping[expectedRow]) {
106 actualToExpectedRowMapping.push_back(expectedRow);
107 EXPECT_FALSE(found) <<
"Found multiple matching rows";
111 EXPECT_TRUE(found) <<
"Could not find matching expected row for result row " << actualRow;
114 for (uint64_t oldState = 0; oldState < expectedOldToNewStateMapping.size(); ++oldState) {
115 uint64_t expectedNewState = expectedOldToNewStateMapping[oldState];
116 uint64_t actualNewState = res.oldToNewStateMapping[oldState];
117 if (actualNewState < std::numeric_limits<uint_fast64_t>::max()) {
118 for (uint64_t actualRow = res.matrix.getRowGroupIndices()[actualNewState]; actualRow < res.matrix.getRowGroupIndices()[actualNewState + 1];
120 uint64_t expectedRow = actualToExpectedRowMapping[actualRow];
121 EXPECT_EQ(res.newToOldRowMapping[actualRow], expectedNewToOldRowMapping[expectedRow]);
126 EXPECT_EQ(expectedMatrix.
getRow(expectedRow).
getNumberOfEntries(), res.matrix.getRow(actualRow).getNumberOfEntries());
127 for (
auto const& expectedEntry : expectedMatrix.
getRow(expectedRow)) {
128 bool foundEqualEntry =
false;
129 for (
auto const& actualEntry : res.matrix.getRow(actualRow)) {
130 if (expectedEntry.getValue() == actualEntry.getValue() &&
131 expectedEntry.getColumn() == actualToExpectedStateMapping[actualEntry.getColumn()]) {
132 EXPECT_FALSE(foundEqualEntry) <<
"Found multiple equal entries.";
133 foundEqualEntry =
true;
136 EXPECT_TRUE(foundEqualEntry) <<
"Could not matching entry for expected entry'" << expectedEntry.getValue() <<
" (row " << expectedRow
137 <<
", column " << expectedEntry.getColumn() <<
"). Was searching at row " << actualRow
138 <<
" of actual matrix \n"
139 << res.matrix <<
".";