1#include "storm-config.h"
4#include <boost/math/distributions/weibull.hpp>
10TEST(DftBETest, FailureConstant) {
12 EXPECT_TRUE(be.failed());
13 EXPECT_TRUE(be.canFail());
15 EXPECT_EQ(1, be.getUnreliability(0));
16 EXPECT_EQ(1, be.getUnreliability(10));
19 EXPECT_FALSE(be2.failed());
20 EXPECT_FALSE(be2.canFail());
22 EXPECT_EQ(0, be2.getUnreliability(0));
23 EXPECT_EQ(0, be2.getUnreliability(8));
26TEST(DftBETest, FailureProbability) {
29 EXPECT_TRUE(be.canFail());
30 EXPECT_EQ(0.2, be.passiveFailureProbability());
32 EXPECT_EQ(0.4, be.getUnreliability(0.4));
33 EXPECT_EQ(0.4, be.getUnreliability(0.5));
34 EXPECT_EQ(0.4, be.getUnreliability(1));
35 EXPECT_EQ(0.4, be.getUnreliability(5));
38TEST(DftBETest, FailureExponential) {
41 EXPECT_TRUE(be.canFail());
42 EXPECT_EQ(1.5, be.passiveFailureRate());
44 EXPECT_EQ(0, be.getUnreliability(0));
45 EXPECT_NEAR(0.7768698399, be.getUnreliability(0.5), 1e-10);
46 EXPECT_NEAR(0.9502129316, be.getUnreliability(1), 1e-10);
47 EXPECT_NEAR(0.9975212478, be.getUnreliability(2), 1e-10);
50TEST(DftBETest, FailureErlang) {
54 EXPECT_TRUE(be.canFail());
55 EXPECT_EQ(3, be.passiveFailureRate());
57 EXPECT_EQ(0, be.getUnreliability(0));
58 EXPECT_NEAR(0.7768698399, be.getUnreliability(0.5), 1e-10);
59 EXPECT_NEAR(0.9502129316, be.getUnreliability(1), 1e-10);
60 EXPECT_NEAR(0.9975212478, be.getUnreliability(2), 1e-10);
65 EXPECT_TRUE(be2.canFail());
66 EXPECT_EQ(3, be2.passiveFailureRate());
68 EXPECT_EQ(0, be2.getUnreliability(0));
69 EXPECT_NEAR(0.0656424544, be2.getUnreliability(0.5), 1e-10);
70 EXPECT_NEAR(0.3527681112, be2.getUnreliability(1), 1e-10);
71 EXPECT_NEAR(0.6577040442, be2.getUnreliability(1.5), 1e-10);
72 EXPECT_NEAR(0.8487961172, be2.getUnreliability(2), 1e-10);
73 EXPECT_NEAR(0.9997886215, be2.getUnreliability(5), 1e-10);
76TEST(DftBETest, FailureWeibullExponential) {
80 EXPECT_TRUE(be.canFail());
82 EXPECT_EQ(0, be.getUnreliability(0));
83 EXPECT_NEAR(0.7768698399, be.getUnreliability(0.5), 1e-10);
84 EXPECT_NEAR(0.9502129316, be.getUnreliability(1), 1e-10);
85 EXPECT_NEAR(0.9975212478, be.getUnreliability(2), 1e-10);
88 boost::math::weibull_distribution<double> dist(1, 1.0 / 3.0);
89 for (
double t = 0; t <= 5.0; t += 0.25) {
90 EXPECT_NEAR(boost::math::cdf(dist, t), be.getUnreliability(t), 1e-10);
96 EXPECT_TRUE(be2.canFail());
98 EXPECT_EQ(0, be2.getUnreliability(0));
99 EXPECT_NEAR(0.0605869372, be2.getUnreliability(0.5), 1e-10);
100 EXPECT_NEAR(0.2211992169, be2.getUnreliability(1), 1e-10);
101 EXPECT_NEAR(0.6321205588, be2.getUnreliability(2), 1e-10);
102 EXPECT_NEAR(0.9980695458, be2.getUnreliability(5), 1e-10);
105 boost::math::weibull_distribution<double> dist2(2, 2);
106 for (
double t = 0; t <= 5.0; t += 0.25) {
107 EXPECT_NEAR(boost::math::cdf(dist2, t), be2.getUnreliability(t), 1e-10);
113 EXPECT_TRUE(be3.canFail());
115 EXPECT_EQ(0, be3.getUnreliability(0));
116 EXPECT_NEAR(0.4369287910, be3.getUnreliability(0.5), 1e-10);
117 EXPECT_NEAR(0.5313308906, be3.getUnreliability(1), 1e-10);
118 EXPECT_NEAR(0.6321205588, be3.getUnreliability(2), 1e-10);
119 EXPECT_NEAR(0.7637110612, be3.getUnreliability(5), 1e-10);
122 boost::math::weibull_distribution<double> dist3(0.4, 2);
123 for (
double t = 0; t <= 5.0; t += 0.25) {
124 EXPECT_NEAR(boost::math::cdf(dist3, t), be3.getUnreliability(t), 1e-10);
128TEST(DftBETest, FailureLogNormal) {
132 EXPECT_TRUE(be.canFail());
134 EXPECT_EQ(0, be.getUnreliability(0));
135 EXPECT_NEAR(0.0828285190, be.getUnreliability(0.5), 1e-10);
136 EXPECT_NEAR(0.5, be.getUnreliability(1), 1e-10);
137 EXPECT_NEAR(0.9171714810, be.getUnreliability(2), 1e-10);
138 EXPECT_NEAR(0.9993565290, be.getUnreliability(5), 1e-10);
143 EXPECT_TRUE(be2.canFail());
145 EXPECT_EQ(0, be2.getUnreliability(0));
146 EXPECT_NEAR(6.32491e-12, be2.getUnreliability(0.5), 1e-17);
147 EXPECT_NEAR(3.167124183e-5, be2.getUnreliability(1), 1e-14);
148 EXPECT_NEAR(0.1098340249, be2.getUnreliability(2), 1e-10);
149 EXPECT_NEAR(0.9926105382, be2.getUnreliability(5), 1e-10);
152TEST(DftBETest, FailureSamples) {
154 std::map<double, double> samples = {{0.0, 0.0},
155 {0.25, 0.0009760858180243304},
156 {0.5, 0.03076676552365587},
157 {0.75, 0.21124907114638225},
158 {1.0, 0.6321205588285577},
159 {1.25, 0.9527242505937095},
160 {1.5, 0.9994964109502631},
161 {1.75, 0.999999925546118},
162 {2.0, 0.9999999999999873}};
165 EXPECT_TRUE(be.canFail());
168 boost::math::weibull_distribution<double> dist(5, 1);
169 for (
double t = 0; t <= 2.0; t += 0.25) {
170 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.