Browse code
generator handles int max and min
Greg Wiley authored on 04/05/2017 18:15:12
Showing 2 changed files
Showing 2 changed files
... | ... |
@@ -16,13 +16,14 @@ |
16 | 16 |
#include <functional> |
17 | 17 |
#include <sstream> |
18 | 18 |
#include <iomanip> |
19 |
+#include <cmath> |
|
19 | 20 |
|
20 | 21 |
#include "sys_stdlib.h" |
21 | 22 |
|
22 | 23 |
using generator = std::function<std::string()>; |
23 | 24 |
|
24 | 25 |
inline std::string token_from_int(int x) { |
25 |
- int v = x % 1000000; |
|
26 |
+ int v = std::abs(x % 1000000); |
|
26 | 27 |
std::ostringstream is; |
27 | 28 |
is << std::setfill('0') << std::setw(6)<< v; |
28 | 29 |
return is.str(); |
... | ... |
@@ -12,6 +12,8 @@ |
12 | 12 |
#include <algorithm> |
13 | 13 |
#include <initializer_list> |
14 | 14 |
#include <vector> |
15 |
+#include <climits> |
|
16 |
+ |
|
15 | 17 |
#include "generator.h" |
16 | 18 |
#include "sys_stdlib.h" |
17 | 19 |
#include "test_util.h" |
... | ... |
@@ -38,7 +40,7 @@ class fake_stdlib : public stdlib_ifc { |
38 | 40 |
int six_digits() |
39 | 41 |
{ |
40 | 42 |
// given |
41 |
- std::initializer_list<int> samples { 1, 2, 3 }; |
|
43 |
+ std::initializer_list<int> samples { 1 }; |
|
42 | 44 |
auto test_stdlib = std::make_shared<fake_stdlib>(samples); |
43 | 45 |
stdlib stdlib(test_stdlib); |
44 | 46 |
generator generator = make_generator(stdlib); |
... | ... |
@@ -70,10 +72,52 @@ int modulated_source_modulates_tokens() { |
70 | 72 |
succeed(); |
71 | 73 |
} |
72 | 74 |
|
75 |
+int int_max() |
|
76 |
+{ |
|
77 |
+ // given |
|
78 |
+ std::initializer_list<int> samples { INT_MAX }; |
|
79 |
+ auto test_stdlib = std::make_shared<fake_stdlib>(samples); |
|
80 |
+ stdlib stdlib(test_stdlib); |
|
81 |
+ generator generator = make_generator(stdlib); |
|
82 |
+ |
|
83 |
+ // when |
|
84 |
+ auto actual = generator(); |
|
85 |
+ |
|
86 |
+ // then |
|
87 |
+ check (actual.size() == 6, "size is wrong"); |
|
88 |
+ check (std::all_of (actual.begin(), actual.end(), [] (char c) { |
|
89 |
+ return c >= '0' && c <= '9'; |
|
90 |
+ }), "not just digits"); |
|
91 |
+ succeed(); |
|
92 |
+} |
|
93 |
+ |
|
94 |
+int int_min() |
|
95 |
+{ |
|
96 |
+ // given |
|
97 |
+ std::initializer_list<int> samples { INT_MIN }; |
|
98 |
+ auto test_stdlib = std::make_shared<fake_stdlib>(samples); |
|
99 |
+ stdlib stdlib(test_stdlib); |
|
100 |
+ generator generator = make_generator(stdlib); |
|
101 |
+ |
|
102 |
+ // when |
|
103 |
+ auto actual = generator(); |
|
104 |
+ |
|
105 |
+ // then |
|
106 |
+ check (actual.size() == 6, "size is wrong"); |
|
107 |
+ check (std::all_of (actual.begin(), actual.end(), [] (char c) { |
|
108 |
+ return c >= '0' && c <= '9'; |
|
109 |
+ }), "not just digits"); |
|
110 |
+ succeed(); |
|
111 |
+} |
|
112 |
+ |
|
113 |
+ |
|
114 |
+ |
|
73 | 115 |
int run_tests() |
74 | 116 |
{ |
75 | 117 |
test (six_digits); |
76 | 118 |
test (modulated_source_modulates_tokens); |
119 |
+ test (int_max); |
|
120 |
+ test (int_min); |
|
77 | 121 |
succeed(); |
78 | 122 |
} |
79 | 123 |
|