git.fiddlerwoaroof.com
Browse code

generator handles int max and min

Greg Wiley authored on 04/05/2017 18:15:12
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