1#include "storm-config.h"
4#include <boost/math/distributions/weibull.hpp>
16TEST(DftBETest, FailureConstant) {
18 EXPECT_TRUE(be.failed());
19 EXPECT_TRUE(be.canFail());
21 EXPECT_EQ(1, be.getUnreliability(0));
22 EXPECT_EQ(1, be.getUnreliability(10));
25 EXPECT_FALSE(be2.failed());
26 EXPECT_FALSE(be2.canFail());
28 EXPECT_EQ(0, be2.getUnreliability(0));
29 EXPECT_EQ(0, be2.getUnreliability(8));
32TEST(DftBETest, FailureProbability) {
35 EXPECT_TRUE(be.canFail());
36 EXPECT_EQ(0.2, be.passiveFailureProbability());
38 EXPECT_EQ(0.4, be.getUnreliability(0.4));
39 EXPECT_EQ(0.4, be.getUnreliability(0.5));
40 EXPECT_EQ(0.4, be.getUnreliability(1));
41 EXPECT_EQ(0.4, be.getUnreliability(5));
44TEST(DftBETest, FailureExponential) {
47 EXPECT_TRUE(be.canFail());
48 EXPECT_EQ(1.5, be.passiveFailureRate());
50 EXPECT_EQ(0, be.getUnreliability(0));
51 EXPECT_NEAR(0.7768698399, be.getUnreliability(0.5), 1e-10);
52 EXPECT_NEAR(0.9502129316, be.getUnreliability(1), 1e-10);
53 EXPECT_NEAR(0.9975212478, be.getUnreliability(2), 1e-10);
56TEST(DftBETest, FailureErlang) {
60 EXPECT_TRUE(be.canFail());
61 EXPECT_EQ(3, be.passiveFailureRate());
63 EXPECT_EQ(0, be.getUnreliability(0));
64 EXPECT_NEAR(0.7768698399, be.getUnreliability(0.5), 1e-10);
65 EXPECT_NEAR(0.9502129316, be.getUnreliability(1), 1e-10);
66 EXPECT_NEAR(0.9975212478, be.getUnreliability(2), 1e-10);
71 EXPECT_TRUE(be2.canFail());
72 EXPECT_EQ(3, be2.passiveFailureRate());
74 EXPECT_EQ(0, be2.getUnreliability(0));
75 EXPECT_NEAR(0.0656424544, be2.getUnreliability(0.5), 1e-10);
76 EXPECT_NEAR(0.3527681112, be2.getUnreliability(1), 1e-10);
77 EXPECT_NEAR(0.6577040442, be2.getUnreliability(1.5), 1e-10);
78 EXPECT_NEAR(0.8487961172, be2.getUnreliability(2), 1e-10);
79 EXPECT_NEAR(0.9997886215, be2.getUnreliability(5), 1e-10);
82TEST(DftBETest, FailureWeibullExponential) {
86 EXPECT_TRUE(be.canFail());
88 EXPECT_EQ(0, be.getUnreliability(0));
89 EXPECT_NEAR(0.7768698399, be.getUnreliability(0.5), 1e-10);
90 EXPECT_NEAR(0.9502129316, be.getUnreliability(1), 1e-10);
91 EXPECT_NEAR(0.9975212478, be.getUnreliability(2), 1e-10);
94 boost::math::weibull_distribution<double> dist(1, 1.0 / 3.0);
95 for (
double t = 0; t <= 5.0; t += 0.25) {
96 EXPECT_NEAR(boost::math::cdf(dist, t), be.getUnreliability(t), 1e-10);
102 EXPECT_TRUE(be2.canFail());
104 EXPECT_EQ(0, be2.getUnreliability(0));
105 EXPECT_NEAR(0.0605869372, be2.getUnreliability(0.5), 1e-10);
106 EXPECT_NEAR(0.2211992169, be2.getUnreliability(1), 1e-10);
107 EXPECT_NEAR(0.6321205588, be2.getUnreliability(2), 1e-10);
108 EXPECT_NEAR(0.9980695458, be2.getUnreliability(5), 1e-10);
111 boost::math::weibull_distribution<double> dist2(2, 2);
112 for (
double t = 0; t <= 5.0; t += 0.25) {
113 EXPECT_NEAR(boost::math::cdf(dist2, t), be2.getUnreliability(t), 1e-10);
119 EXPECT_TRUE(be3.canFail());
121 EXPECT_EQ(0, be3.getUnreliability(0));
122 EXPECT_NEAR(0.4369287910, be3.getUnreliability(0.5), 1e-10);
123 EXPECT_NEAR(0.5313308906, be3.getUnreliability(1), 1e-10);
124 EXPECT_NEAR(0.6321205588, be3.getUnreliability(2), 1e-10);
125 EXPECT_NEAR(0.7637110612, be3.getUnreliability(5), 1e-10);
128 boost::math::weibull_distribution<double> dist3(0.4, 2);
129 for (
double t = 0; t <= 5.0; t += 0.25) {
130 EXPECT_NEAR(boost::math::cdf(dist3, t), be3.getUnreliability(t), 1e-10);
134TEST(DftBETest, FailureLogNormal) {
138 EXPECT_TRUE(be.canFail());
140 EXPECT_EQ(0, be.getUnreliability(0));
141 EXPECT_NEAR(0.0828285190, be.getUnreliability(0.5), 1e-10);
142 EXPECT_NEAR(0.5, be.getUnreliability(1), 1e-10);
143 EXPECT_NEAR(0.9171714810, be.getUnreliability(2), 1e-10);
144 EXPECT_NEAR(0.9993565290, be.getUnreliability(5), 1e-10);
149 EXPECT_TRUE(be2.canFail());
151 EXPECT_EQ(0, be2.getUnreliability(0));
152 EXPECT_NEAR(6.32491e-12, be2.getUnreliability(0.5), 1e-17);
153 EXPECT_NEAR(3.167124183e-5, be2.getUnreliability(1), 1e-14);
154 EXPECT_NEAR(0.1098340249, be2.getUnreliability(2), 1e-10);
155 EXPECT_NEAR(0.9926105382, be2.getUnreliability(5), 1e-10);
158TEST(DftBETest, FailureSamples) {
160 std::map<double, double> samples = {{0.0, 0.0},
161 {0.25, 0.0009760858180243304},
162 {0.5, 0.03076676552365587},
163 {0.75, 0.21124907114638225},
164 {1.0, 0.6321205588285577},
165 {1.25, 0.9527242505937095},
166 {1.5, 0.9994964109502631},
167 {1.75, 0.999999925546118},
168 {2.0, 0.9999999999999873}};
171 EXPECT_TRUE(be.canFail());
174 boost::math::weibull_distribution<double> dist(5, 1);
175 for (
double t = 0; t <= 2.0; t += 0.25) {
176 EXPECT_NEAR(boost::math::cdf(dist, t), be.getUnreliability(t), 1e-10);
BE which is either constant failed or constant failsafe.
BE with Erlang failure distribution.
BE with exponential failure distribution.
BE with log-normal failure distribution.
BE with constant (Bernoulli) failure probability distribution.
BE where the failure distribution is defined by samples.
BE with Weibull failure distribution.