xref: /aoo42x/main/o3tl/qa/test-range.cxx (revision 18cf0442)
131682d32SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
331682d32SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
431682d32SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
531682d32SAndrew Rist  * distributed with this work for additional information
631682d32SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
731682d32SAndrew Rist  * to you under the Apache License, Version 2.0 (the
831682d32SAndrew Rist  * "License"); you may not use this file except in compliance
931682d32SAndrew Rist  * with the License.  You may obtain a copy of the License at
1031682d32SAndrew Rist  *
1131682d32SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
1231682d32SAndrew Rist  *
1331682d32SAndrew Rist  * Unless required by applicable law or agreed to in writing,
1431682d32SAndrew Rist  * software distributed under the License is distributed on an
1531682d32SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1631682d32SAndrew Rist  * KIND, either express or implied.  See the License for the
1731682d32SAndrew Rist  * specific language governing permissions and limitations
1831682d32SAndrew Rist  * under the License.
1931682d32SAndrew Rist  *
2031682d32SAndrew Rist  *************************************************************/
2131682d32SAndrew Rist 
2231682d32SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #include "preextstl.h"
25*18cf0442SDamjan Jovanovic #include "gtest/gtest.h"
26cdf0e10cSrcweir #include "postextstl.h"
27cdf0e10cSrcweir 
28cdf0e10cSrcweir #include <o3tl/range.hxx>
29cdf0e10cSrcweir #include <vector>
30cdf0e10cSrcweir #include <deque>
31cdf0e10cSrcweir 
32cdf0e10cSrcweir 
33cdf0e10cSrcweir 
34cdf0e10cSrcweir using o3tl::range;
35cdf0e10cSrcweir using o3tl::make_range;
36cdf0e10cSrcweir using o3tl::range_of;
37cdf0e10cSrcweir using std::size_t;
38cdf0e10cSrcweir 
39cdf0e10cSrcweir 
40*18cf0442SDamjan Jovanovic class range_test : public ::testing::Test
41cdf0e10cSrcweir {
42cdf0e10cSrcweir public:
43cdf0e10cSrcweir 
int_test()44cdf0e10cSrcweir     void int_test()
45cdf0e10cSrcweir     {
46cdf0e10cSrcweir         range<int>
47cdf0e10cSrcweir             t1(12,88);
48cdf0e10cSrcweir         range<int>
49cdf0e10cSrcweir             t2(33,33);
50cdf0e10cSrcweir 
51cdf0e10cSrcweir         // ctor
52*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.begin() == 12) << "int ctor1";
53*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.end() == 88) << "int ctor2";
54*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t2.begin() == 33) << "int ctor3";
55*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t2.end() == 33) << "int ctor4";
56cdf0e10cSrcweir 
57cdf0e10cSrcweir         // make_range
58*18cf0442SDamjan Jovanovic         ASSERT_TRUE(make_range(0,8).begin() == 0) << "int make_range1";
59*18cf0442SDamjan Jovanovic         ASSERT_TRUE(make_range(0,8).end() == 8) << "int make_range2";
60cdf0e10cSrcweir 
61cdf0e10cSrcweir         // size
62*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.size() == size_t(t1.end() - t1.begin())) << "int size1";
63*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t2.size() == size_t(0)) << "int size2";
64cdf0e10cSrcweir 
65cdf0e10cSrcweir         // contains
66cdf0e10cSrcweir         range<int>      t3(0,10);
67cdf0e10cSrcweir         range<int>      t4(7, 15);
68cdf0e10cSrcweir         range<int>      t5(12, 12);
69cdf0e10cSrcweir         range<int>      t6(13, 77);
70cdf0e10cSrcweir         range<int>      t7(87, 87);
71cdf0e10cSrcweir         range<int>      t8(87, 88);
72cdf0e10cSrcweir         range<int>      t9(88, 88);
73cdf0e10cSrcweir         range<int>      t10(33, 120);
74cdf0e10cSrcweir         range<int>      t11(90, 100);
75cdf0e10cSrcweir         range<int>      t12(200,200);
76cdf0e10cSrcweir 
77*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.contains(t1)) << "int contains1";
78*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.contains(t2)) << "int contains2";
79*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(t3)) << "int contains3";
80*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(t4)) << "int contains4";
81*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.contains(t5)) << "int contains5";
82*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.contains(t6)) << "int contains6";
83*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.contains(t7)) << "int contains7";
84*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.contains(t8)) << "int contains8";
85*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(t9)) << "int contains9";
86*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(t10)) << "int contains10";
87*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(t11)) << "int contains11";
88*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(t12)) << "int contains12";
89*18cf0442SDamjan Jovanovic 
90*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.contains(50)) << "int contains n1";
91*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.contains(12)) << "int contains n2";
92*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.contains(87)) << "int contains n3";
93*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(3)) << "int contains n4";
94*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(11)) << "int contains n5";
95*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(88)) << "int contains n6";
96*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(100)) << "int contains n7";
97cdf0e10cSrcweir 
98cdf0e10cSrcweir         // overlaps
99cdf0e10cSrcweir         range<int>      t13(88,99);
100cdf0e10cSrcweir 
101*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.overlaps(t1)) << "int overlaps1";
102*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.overlaps(t2)) << "int overlaps2";
103*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.overlaps(t3)) << "int overlaps3";
104*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.overlaps(t4)) << "int overlaps4";
105*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.overlaps(t5)) << "int overlaps5";
106*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.overlaps(t6)) << "int overlaps6";
107*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.overlaps(t7)) << "int overlaps7";
108*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.overlaps(t8)) << "int overlaps8";
109*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.overlaps(t9)) << "int overlaps9";
110*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.overlaps(t10)) << "int overlaps10";
111*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.overlaps(t11)) << "int overlaps11";
112*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.overlaps(t12)) << "int overlaps12";
113*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.overlaps(t13)) << "int overlaps13";
114cdf0e10cSrcweir 
115cdf0e10cSrcweir         // distance_to
116*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.distance_to(t13) == 0) << "int distance_to1";
117*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.distance_to(t9) == 0) << "int distance_to2";
118*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.distance_to(t11) == 2) << "int distance_to3";
119*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.distance_to(t8) == -1) << "int distance_to4";
120*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.distance_to(t3) == -88) << "int distance_to5";
121cdf0e10cSrcweir     }
122cdf0e10cSrcweir 
iterator_test()123cdf0e10cSrcweir     void iterator_test()
124cdf0e10cSrcweir     {
125cdf0e10cSrcweir         typedef std::vector<char>::const_iterator   test_it;
126cdf0e10cSrcweir         const std::vector<char>            hv(200,'x');
127cdf0e10cSrcweir 
128cdf0e10cSrcweir 
129cdf0e10cSrcweir         test_it hit1 = hv.begin() + 12;
130cdf0e10cSrcweir         test_it hit2 = hv.begin() + 88;
131cdf0e10cSrcweir 
132cdf0e10cSrcweir         range<test_it>
133cdf0e10cSrcweir             t1(hit1, hit2);
134cdf0e10cSrcweir         range<test_it>
135cdf0e10cSrcweir             t2(hv.begin()+33, hv.begin()+33);
136cdf0e10cSrcweir 
137cdf0e10cSrcweir         // ctor
138*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.begin() == hit1) << "ivec ctor1";
139*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.end() == hit2) << "ivec ctor2";
140*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t2.begin() == hv.begin()+33) << "ivec ctor3";
141*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t2.end() == hv.begin()+33) << "ivec ctor4";
142cdf0e10cSrcweir 
143cdf0e10cSrcweir         // make_range
144*18cf0442SDamjan Jovanovic         ASSERT_TRUE(make_range(hv.begin(), hv.begin()+8).begin() == hv.begin()) << "ivec make_range1";
145*18cf0442SDamjan Jovanovic         ASSERT_TRUE(make_range(hv.begin(), hv.begin()+8).end() == hv.begin()+8) << "ivec make_range2";
146cdf0e10cSrcweir 
147cdf0e10cSrcweir         // size
148*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.size() == size_t(t1.end() - t1.begin())) << "ivec size1";
149*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t2.size() == size_t(0)) << "ivec size2";
150cdf0e10cSrcweir 
151cdf0e10cSrcweir         // contains
152cdf0e10cSrcweir         range<test_it>      t3(hv.begin(), hv.begin() + 10);
153cdf0e10cSrcweir         range<test_it>      t4(hv.begin() + 7, hv.begin() + 15);
154cdf0e10cSrcweir         range<test_it>      t5(hit1, hit1);
155cdf0e10cSrcweir         range<test_it>      t6(hv.begin() + 13, hv.begin() + 77);
156cdf0e10cSrcweir         range<test_it>      t7(hv.begin() + 87, hv.begin() + 87);
157cdf0e10cSrcweir         range<test_it>      t8(hv.begin() + 87, hit2);
158cdf0e10cSrcweir         range<test_it>      t9(hit2, hit2);
159cdf0e10cSrcweir         range<test_it>      t10(hv.begin() + 33, hv.begin() + 120);
160cdf0e10cSrcweir         range<test_it>      t11(hv.begin() + 90, hv.begin() + 100);
161cdf0e10cSrcweir         range<test_it>      t12(hv.begin() + 200,hv.begin() + 200);
162cdf0e10cSrcweir 
163*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.contains(t1)) << "ivec contains1";
164*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.contains(t2)) << "ivec contains2";
165*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(t3)) << "ivec contains3";
166*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(t4)) << "ivec contains4";
167*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.contains(t5)) << "ivec contains5";
168*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.contains(t6)) << "ivec contains6";
169*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.contains(t7)) << "ivec contains7";
170*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.contains(t8)) << "ivec contains8";
171*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(t9)) << "ivec contains9";
172*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(t10)) << "ivec contains10";
173*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(t11)) << "ivec contains11";
174*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(t12)) << "ivec contains12";
175*18cf0442SDamjan Jovanovic 
176*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.contains(hv.begin() + 50)) << "ivec contains n1";
177*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.contains(hit1)) << "ivec contains n2";
178*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.contains(hv.begin() + 87)) << "ivec contains n3";
179*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(hv.begin() + 3)) << "ivec contains n4";
180*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(hv.begin() + 11)) << "ivec contains n5";
181*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(hit2)) << "ivec contains n6";
182*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.contains(hv.begin() + 100)) << "ivec contains n7";
183cdf0e10cSrcweir 
184cdf0e10cSrcweir         // overlaps
185cdf0e10cSrcweir         range<test_it>      t13(hit2, hv.begin() + 99);
186cdf0e10cSrcweir 
187*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.overlaps(t1)) << "ivec overlaps1";
188*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.overlaps(t2)) << "ivec overlaps2";
189*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.overlaps(t3)) << "ivec overlaps3";
190*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.overlaps(t4)) << "ivec overlaps4";
191*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.overlaps(t5)) << "ivec overlaps5";
192*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.overlaps(t6)) << "ivec overlaps6";
193*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.overlaps(t7)) << "ivec overlaps7";
194*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.overlaps(t8)) << "ivec overlaps8";
195*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.overlaps(t9)) << "ivec overlaps9";
196*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.overlaps(t10)) << "ivec overlaps10";
197*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.overlaps(t11)) << "ivec overlaps11";
198*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.overlaps(t12)) << "ivec overlaps12";
199*18cf0442SDamjan Jovanovic         ASSERT_TRUE(! t1.overlaps(t13)) << "ivec overlaps13";
200cdf0e10cSrcweir 
201cdf0e10cSrcweir         // distance_to
202*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.distance_to(t13) == 0) << "ivec distance_to1";
203*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.distance_to(t8) == -1) << "ivec distance_to2";
204*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.distance_to(t9) == 0) << "ivec distance_to3";
205*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.distance_to(t11) == 2) << "ivec distance_to4";
206*18cf0442SDamjan Jovanovic         ASSERT_TRUE(t1.distance_to(t3) == -88) << "ivec distance_to5";
207cdf0e10cSrcweir 
208cdf0e10cSrcweir         const std::vector< int* >   h2(20, (int*)0);
209cdf0e10cSrcweir         std::deque< double >        h3(30, 0.0);
210cdf0e10cSrcweir 
211*18cf0442SDamjan Jovanovic         ASSERT_TRUE(range_of(h2).begin() == h2.begin()) << "range_of1";
212*18cf0442SDamjan Jovanovic         ASSERT_TRUE(range_of(h3).end() == h3.end()) << "range_of2";
213cdf0e10cSrcweir     }
214cdf0e10cSrcweir 
215cdf0e10cSrcweir }; // class range_test
216cdf0e10cSrcweir 
TEST_F(range_test,global)217*18cf0442SDamjan Jovanovic TEST_F(range_test, global)
218*18cf0442SDamjan Jovanovic {
219*18cf0442SDamjan Jovanovic     int_test();
220*18cf0442SDamjan Jovanovic     iterator_test();
221*18cf0442SDamjan Jovanovic }
222*18cf0442SDamjan Jovanovic 
223