Storm 1.13.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
RationalApproximationTest.cpp
Go to the documentation of this file.
1#include "storm-config.h"
2#include "test/storm_gtest.h"
3
7
8namespace {
9
10storm::RationalNumber rn(double doubleValue) {
12}
13
14storm::RationalNumber rn(std::string const& str) {
16}
17TEST(RationalApproximationTest, inclusive_bounds) {
18 EXPECT_EQ(rn("0"), storm::utility::findRational(rn("0"), true, rn("0"), true));
19 EXPECT_EQ(rn("1"), storm::utility::findRational(rn("1"), true, rn("1"), true));
20 EXPECT_EQ(rn("0"), storm::utility::findRational(rn("0"), true, rn("1"), true));
21 EXPECT_EQ(rn("1/2"), storm::utility::findRational(rn("1/3"), true, rn("2/3"), true));
22 EXPECT_EQ(rn("1/2"), storm::utility::findRational(rn("1/10"), true, rn("9/10"), true));
23 EXPECT_EQ(rn("1"), storm::utility::findRational(rn("1/2"), true, rn("1"), true));
24 EXPECT_EQ(rn("1"), storm::utility::findRational(rn("2/3"), true, rn("1"), true));
25 EXPECT_EQ(rn("2/3"), storm::utility::findRational(rn("2/3"), true, rn("3/4"), true));
26 EXPECT_EQ(rn("2/3"), storm::utility::findRational(rn("3/5"), true, rn("3/4"), true));
27 EXPECT_EQ(rn("1"), storm::utility::findRational(rn("2/3"), true, rn("123456"), true));
28 EXPECT_EQ(rn("23/3"), storm::utility::findRational(rn("23/3"), true, rn("31/4"), true));
29 EXPECT_EQ(rn("23/3"), storm::utility::findRational(rn("38/5"), true, rn("31/4"), true));
30 EXPECT_EQ(rn("75/7"), storm::utility::findRational(rn(10.71), true, rn(10.72), true));
31 EXPECT_EQ(rn(0.123456), storm::utility::findRational(rn(0.123456), true, rn(0.123456), true));
32 EXPECT_EQ(rn(987.123456), storm::utility::findRational(rn(987.123456), true, rn(987.123456), true));
33}
34
35TEST(RationalApproximationTest, exclusive_bounds) {
36 EXPECT_EQ(rn("1/2"), storm::utility::findRational(rn("0"), false, rn("1"), false));
37 EXPECT_EQ(rn("0"), storm::utility::findRational(rn("0"), true, rn("1"), false));
38 EXPECT_EQ(rn("1"), storm::utility::findRational(rn("0"), false, rn("1"), true));
39 EXPECT_EQ(rn("1/3"), storm::utility::findRational(rn("0"), false, rn("1/2"), false));
40 EXPECT_EQ(rn("2/3"), storm::utility::findRational(rn("1/2"), false, rn("1"), false));
41 EXPECT_EQ(rn("3/4"), storm::utility::findRational(rn("2/3"), false, rn("1"), false));
42 EXPECT_EQ(rn("5/7"), storm::utility::findRational(rn("2/3"), false, rn("3/4"), false));
43 EXPECT_EQ(rn("3/2"), storm::utility::findRational(rn("1"), false, rn("2"), false));
44 EXPECT_EQ(rn("30/19"), storm::utility::findRational(rn("11/7"), false, rn("19/12"), false));
45 EXPECT_EQ(rn("11/7"), storm::utility::findRational(rn("11/7"), true, rn("19/12"), false));
46 EXPECT_EQ(rn("19/12"), storm::utility::findRational(rn("11/7"), false, rn("19/12"), true));
47 EXPECT_EQ(rn("1000/1001"), storm::utility::findRational(rn("999/1000"), false, rn("1"), false));
48 EXPECT_EQ(rn("999/1000"), storm::utility::findRational(rn("999/1000"), true, rn("1"), false));
49 EXPECT_EQ(rn("333/334"), storm::utility::findRational(rn("997/1000"), true, rn("1"), false));
50 EXPECT_EQ(rn("1001/1000"), storm::utility::findRational(rn("1"), false, rn("1001/1000"), true));
51 EXPECT_EQ(rn("1002/1001"), storm::utility::findRational(rn("1"), false, rn("1001/1000"), false));
52 EXPECT_EQ(rn("335/334"), storm::utility::findRational(rn("1"), false, rn("1003/1000"), true));
53 EXPECT_EQ(rn("500/1001"), storm::utility::findRational(rn("999/2000"), false, rn("1/2"), false));
54 EXPECT_EQ(rn("167/335"), storm::utility::findRational(rn("997/2000"), true, rn("1/2"), false));
55 EXPECT_EQ(rn("500/1001"), storm::utility::findRational(rn("500/1001"), true, rn("1/2"), false));
56 EXPECT_EQ(rn("501/1001"), storm::utility::findRational(rn("1/2"), false, rn("501/1001"), true));
57 EXPECT_EQ(rn("502/1003"), storm::utility::findRational(rn("1/2"), false, rn("501/1001"), false));
58 EXPECT_EQ(rn("168/335"), storm::utility::findRational(rn("1/2"), false, rn("502/1001"), true));
59}
60
61TEST(RationalApproximationTest, negative) {
62 EXPECT_EQ(rn("0"), storm::utility::findRational(rn("-1"), false, rn("1"), false));
63 EXPECT_EQ(rn("0"), storm::utility::findRational(rn("-1"), true, rn("0"), true));
64 EXPECT_EQ(rn("-1"), storm::utility::findRational(rn("-1"), true, rn("0"), false));
65 EXPECT_EQ(rn("-30/19"), storm::utility::findRational(rn("-19/12"), false, rn("-11/7"), false));
66 EXPECT_EQ(rn("-11/7"), storm::utility::findRational(rn("-19/12"), false, rn("-11/7"), true));
67 EXPECT_EQ(rn("-19/12"), storm::utility::findRational(rn("-19/12"), true, rn("-11/7"), false));
68}
69
70} // namespace
TEST(OrderTest, Simple)
Definition OrderTest.cpp:15
storm::RationalNumber findRational(storm::RationalNumber const &lowerBound, bool lowerInclusive, storm::RationalNumber const &upperBound, bool upperInclusive)
Finds the "simplest" rational number in the given interval, where "simplest" means having the smalles...
TargetType convertNumber(SourceType const &number)