Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
IntervalEndComponentPreserverTest.cpp
Go to the documentation of this file.
1#include "storm-config.h"
2#include "test/storm_gtest.h"
3
4#pragma clang diagnostic push
5#pragma clang diagnostic ignored "-Wthread-safety-negative"
6#pragma clang diagnostic ignored "-Wundefined-reinterpret-cast"
7#pragma clang diagnostic ignored "-Wunused-template"
8#include <carl/formula/Constraint.h>
9#pragma clang diagnostic pop
10#include <string>
11
17#include "storm/api/builder.h"
21
22class IntervalEndComponentPreserverTest : public ::testing::Test {
23 protected:
24 void SetUp() override {
25#ifndef STORM_HAVE_Z3
26 GTEST_SKIP() << "Z3 not available.";
27#endif
28 }
29};
30
33 // 0 1 2
34 // ---- group 0/2 ----
35 // 0 ( [0, 1] [0, 1] 0 ) 0
36 // ---- group 1/2 ----
37 // 1 ( 0 0 [1, 1] ) 1
38 // ---- group 2/2 ----
39 // 2 ( 0 0 0 ) 2
40 // 0 1 2
41 builder.addNextValue(0, 0, storm::Interval(0, 1));
42 builder.addNextValue(0, 1, storm::Interval(0, 1));
43 builder.addNextValue(1, 2, storm::Interval(1, 1));
45
46 std::vector<storm::Interval> vector = {storm::Interval(0, 0), storm::Interval(1, 1), storm::Interval(0, 0)};
47
49 auto newMatrix = preserver.eliminateMECs(matrix, vector);
50
51 // Should be this now
52 // 0 1 2 3
53 // ---- group 0/3 ----
54 // 0 ( 0 [0, 1] 0 [0, 1] ) 0
55 // ---- group 1/3 ----
56 // 1 ( 0 0 [1, 1] 0 ) 1
57 // ---- group 2/3 ----
58 // 2 ( 0 0 0 0 ) 2
59 // ---- group 3/3 ----
60 // 3 ( 0 0 0 0 ) 3
61 // 0 1 2 3
62
63 ASSERT_EQ(newMatrix->getRowCount(), 4);
64 ASSERT_EQ(newMatrix->getColumnCount(), 4);
65 ASSERT_EQ(newMatrix->getEntryCount(), 3);
66
67 ASSERT_EQ(newMatrix->getRow(0).getNumberOfEntries(), 2);
68 ASSERT_EQ(newMatrix->getRow(0).begin()->getColumn(), 1);
69 ASSERT_EQ(newMatrix->getRow(0).begin()->getValue(), storm::Interval(0, 1));
70 ASSERT_EQ((newMatrix->getRow(0).begin() + 1)->getColumn(), 3);
71 ASSERT_EQ((newMatrix->getRow(0).begin() + 1)->getValue(), storm::Interval(0, 1));
72
73 ASSERT_EQ(newMatrix->getRow(1).getNumberOfEntries(), 1);
74 ASSERT_EQ(newMatrix->getRow(1).begin()->getColumn(), 2);
75 ASSERT_EQ(newMatrix->getRow(1).begin()->getValue(), storm::Interval(1, 1));
76
77 ASSERT_EQ(newMatrix->getRow(2).getNumberOfEntries(), 0);
78 ASSERT_EQ(newMatrix->getRow(3).getNumberOfEntries(), 0);
79}
TEST_F(IntervalEndComponentPreserverTest, Simple)
A class that can be used to build a sparse matrix by adding value by value.
void addNextValue(index_type row, index_type column, value_type const &value)
Sets the matrix entry at the given row and column to the given value.
SparseMatrix< value_type > build(index_type overriddenRowCount=0, index_type overriddenColumnCount=0, index_type overriddenRowGroupCount=0)
A class that holds a possibly non-square matrix in the compressed row storage format.
std::optional< storage::SparseMatrix< Interval > > eliminateMECs(storm::storage::SparseMatrix< Interval > const &matrix, std::vector< Interval > const &vector)
carl::Interval< double > Interval
Interval type.