11#include < cassert>
22#include < cstdio>
33#include < cstdlib>
4+ #include < gromox/mapi_types.hpp>
5+ #include < gromox/rop_util.hpp>
46#include < gromox/util.hpp>
57using namespace gromox ;
8+
9+ static int t_id1 ()
10+ {
11+ idset s (true , REPL_TYPE_ID);
12+ /* right-side half overlap */
13+ s.append_range (1 , 1 , 17 );
14+ s.append_range (1 , 14 , 21 );
15+ auto &l = s.repl_list .front ().range_list ;
16+ assert (l.size () == 1 );
17+ assert (l.front ().low_value == 1 );
18+ assert (l.front ().high_value == 21 );
19+ return EXIT_SUCCESS;
20+ }
21+
22+ static int t_id2 ()
23+ {
24+ idset s (true , REPL_TYPE_ID);
25+ /* left-side half overlap */
26+ s.append_range (1 , 14 , 21 );
27+ s.append_range (1 , 1 , 17 );
28+ auto &l = s.repl_list .front ().range_list ;
29+ assert (l.size () == 1 );
30+ assert (l.front ().low_value == 1 );
31+ assert (l.front ().high_value == 21 );
32+ return EXIT_SUCCESS;
33+ }
34+
35+ static int t_id3 ()
36+ {
37+ idset s (true , REPL_TYPE_ID);
38+ /* right-side adjacency */
39+ s.append_range (1 , 1 , 19 );
40+ s.append_range (1 , 20 , 29 );
41+ auto &l = s.repl_list .front ().range_list ;
42+ assert (l.size () == 1 );
43+ assert (l.front ().low_value == 1 );
44+ assert (l.front ().high_value == 29 );
45+ return EXIT_SUCCESS;
46+ }
47+
48+ static int t_id4 ()
49+ {
50+ idset s (true , REPL_TYPE_ID);
51+ /* left-side adjacency */
52+ s.append_range (1 , 20 , 29 );
53+ s.append_range (1 , 1 , 19 );
54+ auto &l = s.repl_list .front ().range_list ;
55+ assert (l.size () == 1 );
56+ assert (l.front ().low_value == 1 );
57+ assert (l.front ().high_value == 29 );
58+ return EXIT_SUCCESS;
59+ }
60+
61+ static int t_id5 ()
62+ {
63+ idset s (true , REPL_TYPE_ID);
64+ /* inner overlap */
65+ s.append_range (1 , 1 , 40 );
66+ s.append_range (1 , 15 , 19 );
67+ auto &l = s.repl_list .front ().range_list ;
68+ assert (l.size () == 1 );
69+ assert (l.front ().low_value == 1 );
70+ assert (l.front ().high_value == 40 );
71+ return EXIT_SUCCESS;
72+ }
73+
74+ static int t_id6 ()
75+ {
76+ idset s (true , REPL_TYPE_ID);
77+ /* outer overlap */
78+ s.append_range (1 , 15 , 19 );
79+ s.append_range (1 , 1 , 40 );
80+ auto &l = s.repl_list .front ().range_list ;
81+ assert (l.size () == 1 );
82+ assert (l.front ().low_value == 1 );
83+ assert (l.front ().high_value == 40 );
84+ return EXIT_SUCCESS;
85+ }
86+
87+ static int t_id7 ()
88+ {
89+ idset s (true , REPL_TYPE_ID);
90+ s.append_range (1 , 11 , 19 );
91+ s.append_range (1 , 71 , 79 );
92+ auto &l = s.repl_list .front ().range_list ;
93+ assert (l.size () == 2 );
94+ assert (l.front ().low_value == 11 );
95+ assert (l.front ().high_value == 19 );
96+ assert (l.back ().low_value == 71 );
97+ assert (l.back ().high_value == 79 );
98+ s.append_range (1 , 41 , 49 );
99+ assert (l.size () == 3 );
100+ assert (l.front ().low_value == 11 );
101+ assert (l.front ().high_value == 19 );
102+ assert (std::next (l.begin ())->low_value == 41 );
103+ assert (std::next (l.begin ())->high_value == 49 );
104+ assert (l.back ().low_value == 71 );
105+ assert (l.back ().high_value == 79 );
106+ /* gap filler */
107+ s.append_range (1 , 20 , 40 );
108+ assert (l.size () == 2 );
109+ assert (l.front ().low_value == 11 );
110+ assert (l.front ().high_value == 49 );
111+ assert (l.back ().low_value == 71 );
112+ assert (l.back ().high_value == 79 );
113+ s.append_range (1 , 50 , 70 );
114+ assert (l.size () == 1 );
115+ assert (l.front ().low_value == 11 );
116+ assert (l.front ().high_value == 79 );
117+ return EXIT_SUCCESS;
118+ }
119+
6120static int t_interval ()
7121{
8122 const char *in = " 1 d 1 h 1 m 1 s " ;
@@ -14,9 +128,15 @@ static int t_interval()
14128 }
15129 return EXIT_SUCCESS;
16130}
131+
17132int main ()
18133{
19- auto ret = t_interval ();
20- if (ret != EXIT_SUCCESS)
21- return ret;
134+ using fpt = decltype (&t_interval);
135+ fpt fct[] = {t_interval, t_id1, t_id2, t_id3, t_id4, t_id5, t_id6, t_id7};
136+ for (auto f : fct) {
137+ auto ret = f ();
138+ if (ret != EXIT_SUCCESS)
139+ return ret;
140+ }
141+ return EXIT_SUCCESS;
22142}
0 commit comments