|
|
@ -22,7 +22,10 @@ std::shared_ptr<storm::models::sparse::Model<double>> buildExampleModel() { |
|
|
|
return storm::builder::ExplicitModelBuilder<double>(program).build(); |
|
|
|
} |
|
|
|
|
|
|
|
const storm::utility::ksp::state_t testState = 300; |
|
|
|
// NOTE: these are hardcoded (obviously), but the model's state indices might change
|
|
|
|
// (e.g., when the parser or model builder are changed)
|
|
|
|
// [state 296 seems to be the new index of the old state 300 (checked a few ksps' probs)]
|
|
|
|
const storm::utility::ksp::state_t testState = 296; |
|
|
|
const storm::utility::ksp::state_t stateWithOnlyOnePath = 1; |
|
|
|
|
|
|
|
TEST(KSPTest, dijkstra) { |
|
|
@ -58,17 +61,18 @@ TEST(KSPTest, groupTarget) { |
|
|
|
auto groupTarget = std::vector<storm::utility::ksp::state_t>{50, 90}; |
|
|
|
auto spg = storm::utility::ksp::ShortestPathsGenerator<double>(*model, groupTarget); |
|
|
|
|
|
|
|
// FIXME comments are outdated (but does it even matter?)
|
|
|
|
// this path should lead to 90
|
|
|
|
double dist1 = spg.getDistance(8); |
|
|
|
EXPECT_DOUBLE_EQ(7.3796982335999988e-06, dist1); |
|
|
|
EXPECT_DOUBLE_EQ(0.00018449245583999996, dist1); |
|
|
|
|
|
|
|
// this one to 50
|
|
|
|
double dist2 = spg.getDistance(9); |
|
|
|
EXPECT_DOUBLE_EQ(3.92e-06, dist2); |
|
|
|
EXPECT_DOUBLE_EQ(0.00018449245583999996, dist2); |
|
|
|
|
|
|
|
// this one to 90 again
|
|
|
|
double dist3 = spg.getDistance(12); |
|
|
|
EXPECT_DOUBLE_EQ(3.6160521344640002e-06, dist3); |
|
|
|
EXPECT_DOUBLE_EQ(7.5303043199999984e-06, dist3); |
|
|
|
} |
|
|
|
|
|
|
|
TEST(KSPTest, kTooLargeException) { |
|
|
@ -83,13 +87,13 @@ TEST(KSPTest, kspStateSet) { |
|
|
|
storm::utility::ksp::ShortestPathsGenerator<double> spg(*model, testState); |
|
|
|
|
|
|
|
storm::storage::BitVector referenceBV(model->getNumberOfStates(), false); |
|
|
|
for (auto s : std::vector<storm::utility::ksp::state_t>{300, 293, 285, 279, 271, 265, 259, 252, 244, 237, 229, 223, 217, 210, 202, 195, 187, 181, 175, 168, 160, 153, 145, 139, 133, 126, 118, 111, 103, 97, 91, 84, 76, 69, 61, 55, 49, 43, 35, 41, 32, 25, 19, 14, 10, 7, 4, 2, 1, 0}) { |
|
|
|
for (auto s : std::vector<storm::utility::ksp::state_t>{0, 1, 3, 5, 7, 10, 14, 19, 25, 29, 33, 36, 40, 44, 50, 56, 62, 70, 77, 85, 92, 98, 104, 112, 119, 127, 134, 140, 146, 154, 161, 169, 176, 182, 188, 196, 203, 211, 218, 224, 230, 238, 245, 253, 260, 266, 272, 281, 288, 296}) { |
|
|
|
referenceBV.set(s, true); |
|
|
|
} |
|
|
|
|
|
|
|
auto bv = spg.getStates(7); |
|
|
|
|
|
|
|
EXPECT_EQ(bv, referenceBV); |
|
|
|
EXPECT_EQ(referenceBV, bv); |
|
|
|
} |
|
|
|
|
|
|
|
TEST(KSPTest, kspPathAsList) { |
|
|
@ -97,8 +101,8 @@ TEST(KSPTest, kspPathAsList) { |
|
|
|
storm::utility::ksp::ShortestPathsGenerator<double> spg(*model, testState); |
|
|
|
|
|
|
|
// TODO: use path that actually has a loop or something to make this more interesting
|
|
|
|
auto reference = storm::utility::ksp::OrderedStateList{300, 293, 285, 279, 271, 265, 259, 252, 244, 237, 229, 223, 217, 210, 202, 195, 187, 181, 175, 168, 160, 153, 145, 139, 133, 126, 118, 111, 103, 97, 91, 84, 76, 69, 61, 55, 49, 43, 35, 41, 32, 25, 19, 14, 10, 7, 4, 2, 1, 0}; |
|
|
|
auto reference = storm::utility::ksp::OrderedStateList{296, 288, 281, 272, 266, 260, 253, 245, 238, 230, 224, 218, 211, 203, 196, 188, 182, 176, 169, 161, 154, 146, 140, 134, 127, 119, 112, 104, 98, 92, 85, 77, 70, 62, 56, 50, 44, 36, 29, 40, 33, 25, 19, 14, 10, 7, 5, 3, 1, 0}; |
|
|
|
auto list = spg.getPathAsList(7); |
|
|
|
|
|
|
|
EXPECT_EQ(list, reference); |
|
|
|
EXPECT_EQ(reference, list); |
|
|
|
} |