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