-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathenvironment.cpp
139 lines (98 loc) · 3.25 KB
/
environment.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include "environment.h"
#include "utilities.h"
#include <cassert>
environment::environment(double target_valueA, double target_valueB):
m_ref_target_values{target_valueA,target_valueB},
m_current_target_value {target_valueA}
{
}
environment::environment(env_param e_p):
m_ref_target_values{e_p.targetA,e_p.targetB},
m_current_target_value {e_p.targetA}
{
}
bool operator== (const environment& lhs, const environment& rhs)
{
bool ref_t_values = lhs.get_ref_target_values() == rhs.get_ref_target_values();
bool current_t_value = are_equal_with_tolerance(lhs.get_current_target_value(), rhs.get_current_target_value());
return ref_t_values && current_t_value;
}
double get_target_valueA(const environment& e)
{
return e.get_ref_target_values()[0];
}
double get_target_valueB(const environment& e)
{
return e.get_ref_target_values()[1];
}
void switch_target(environment &e){
//Check which target value is the current one and switch it over to the other
if (are_equal_with_tolerance(e.get_current_target_value(),
get_target_valueA(e))
)
{
e.set_current_target_value(get_target_valueB(e));
}
else
{
e.set_current_target_value(get_target_valueA(e));
}
}
#ifndef NDEBUG
void test_environment() noexcept
{
//an environment has a m_current_target_value member
{
double target_valueA = 0.123456;
double target_valueB = 0.654321;
environment e{target_valueA, target_valueB};
assert(e.get_current_target_value() < 0 || e.get_current_target_value() > 0);
}
//an env has 2 reference target values;
{
double target_valueA = 0.123456;
double target_valueB = 0.654321;
environment e{target_valueA, target_valueB};
assert(e.get_ref_target_values().size() == 2);
}
//an env can be initialized with 2 reference target values
{
double target_valueA = 0.123456;
double target_valueB = 0.654321;
environment e{target_valueA, target_valueB};
assert(get_target_valueA(e) - target_valueA < 0.0001
&& get_target_valueA(e) - target_valueA > -0.0001);
assert(get_target_valueB(e) - target_valueB < 0.0001
&& get_target_valueB(e) - target_valueB > -0.0001);
}
//Current target value is initialized to the first of the 2 target values
{
double targetA = 0.123456;
double targetB = 0.654321;
environment e{targetA,targetB};
assert(are_equal_with_tolerance(e.get_current_target_value(), targetA));
assert(are_not_equal_with_tolerance(e.get_current_target_value(), targetB));
}
//ISSUE_25
//An environment can switch target values
{
double targetA = 0.123456;
double targetB = 0.654321;
environment e{targetA,targetB};
assert(are_equal_with_tolerance(e.get_current_target_value(), targetA));
switch_target(e);
assert(are_equal_with_tolerance(e.get_current_target_value(), targetB));
switch_target(e);
assert(are_equal_with_tolerance(e.get_current_target_value(), targetA));
}
//#define FIX_ISSUE_35
{
double targetA = 123456;
double targetB = 46589;
env_param e_p{targetA, targetB};
environment e{e_p};
assert(are_equal_with_tolerance(get_target_valueA(e), targetA));
assert(are_equal_with_tolerance(get_target_valueB(e), targetB));
}
}
#endif