/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #include "preextstl.h" #include "gtest/gtest.h" #include "postextstl.h" #include #include #include using o3tl::range; using o3tl::make_range; using o3tl::range_of; using std::size_t; class range_test : public ::testing::Test { public: void int_test() { range t1(12,88); range t2(33,33); // ctor ASSERT_TRUE(t1.begin() == 12) << "int ctor1"; ASSERT_TRUE(t1.end() == 88) << "int ctor2"; ASSERT_TRUE(t2.begin() == 33) << "int ctor3"; ASSERT_TRUE(t2.end() == 33) << "int ctor4"; // make_range ASSERT_TRUE(make_range(0,8).begin() == 0) << "int make_range1"; ASSERT_TRUE(make_range(0,8).end() == 8) << "int make_range2"; // size ASSERT_TRUE(t1.size() == size_t(t1.end() - t1.begin())) << "int size1"; ASSERT_TRUE(t2.size() == size_t(0)) << "int size2"; // contains range t3(0,10); range t4(7, 15); range t5(12, 12); range t6(13, 77); range t7(87, 87); range t8(87, 88); range t9(88, 88); range t10(33, 120); range t11(90, 100); range t12(200,200); ASSERT_TRUE(t1.contains(t1)) << "int contains1"; ASSERT_TRUE(t1.contains(t2)) << "int contains2"; ASSERT_TRUE(! t1.contains(t3)) << "int contains3"; ASSERT_TRUE(! t1.contains(t4)) << "int contains4"; ASSERT_TRUE(t1.contains(t5)) << "int contains5"; ASSERT_TRUE(t1.contains(t6)) << "int contains6"; ASSERT_TRUE(t1.contains(t7)) << "int contains7"; ASSERT_TRUE(t1.contains(t8)) << "int contains8"; ASSERT_TRUE(! t1.contains(t9)) << "int contains9"; ASSERT_TRUE(! t1.contains(t10)) << "int contains10"; ASSERT_TRUE(! t1.contains(t11)) << "int contains11"; ASSERT_TRUE(! t1.contains(t12)) << "int contains12"; ASSERT_TRUE(t1.contains(50)) << "int contains n1"; ASSERT_TRUE(t1.contains(12)) << "int contains n2"; ASSERT_TRUE(t1.contains(87)) << "int contains n3"; ASSERT_TRUE(! t1.contains(3)) << "int contains n4"; ASSERT_TRUE(! t1.contains(11)) << "int contains n5"; ASSERT_TRUE(! t1.contains(88)) << "int contains n6"; ASSERT_TRUE(! t1.contains(100)) << "int contains n7"; // overlaps range t13(88,99); ASSERT_TRUE(t1.overlaps(t1)) << "int overlaps1"; ASSERT_TRUE(t1.overlaps(t2)) << "int overlaps2"; ASSERT_TRUE(! t1.overlaps(t3)) << "int overlaps3"; ASSERT_TRUE(t1.overlaps(t4)) << "int overlaps4"; ASSERT_TRUE(t1.overlaps(t5)) << "int overlaps5"; ASSERT_TRUE(t1.overlaps(t6)) << "int overlaps6"; ASSERT_TRUE(t1.overlaps(t7)) << "int overlaps7"; ASSERT_TRUE(t1.overlaps(t8)) << "int overlaps8"; ASSERT_TRUE(! t1.overlaps(t9)) << "int overlaps9"; ASSERT_TRUE(t1.overlaps(t10)) << "int overlaps10"; ASSERT_TRUE(! t1.overlaps(t11)) << "int overlaps11"; ASSERT_TRUE(! t1.overlaps(t12)) << "int overlaps12"; ASSERT_TRUE(! t1.overlaps(t13)) << "int overlaps13"; // distance_to ASSERT_TRUE(t1.distance_to(t13) == 0) << "int distance_to1"; ASSERT_TRUE(t1.distance_to(t9) == 0) << "int distance_to2"; ASSERT_TRUE(t1.distance_to(t11) == 2) << "int distance_to3"; ASSERT_TRUE(t1.distance_to(t8) == -1) << "int distance_to4"; ASSERT_TRUE(t1.distance_to(t3) == -88) << "int distance_to5"; } void iterator_test() { typedef std::vector::const_iterator test_it; const std::vector hv(200,'x'); test_it hit1 = hv.begin() + 12; test_it hit2 = hv.begin() + 88; range t1(hit1, hit2); range t2(hv.begin()+33, hv.begin()+33); // ctor ASSERT_TRUE(t1.begin() == hit1) << "ivec ctor1"; ASSERT_TRUE(t1.end() == hit2) << "ivec ctor2"; ASSERT_TRUE(t2.begin() == hv.begin()+33) << "ivec ctor3"; ASSERT_TRUE(t2.end() == hv.begin()+33) << "ivec ctor4"; // make_range ASSERT_TRUE(make_range(hv.begin(), hv.begin()+8).begin() == hv.begin()) << "ivec make_range1"; ASSERT_TRUE(make_range(hv.begin(), hv.begin()+8).end() == hv.begin()+8) << "ivec make_range2"; // size ASSERT_TRUE(t1.size() == size_t(t1.end() - t1.begin())) << "ivec size1"; ASSERT_TRUE(t2.size() == size_t(0)) << "ivec size2"; // contains range t3(hv.begin(), hv.begin() + 10); range t4(hv.begin() + 7, hv.begin() + 15); range t5(hit1, hit1); range t6(hv.begin() + 13, hv.begin() + 77); range t7(hv.begin() + 87, hv.begin() + 87); range t8(hv.begin() + 87, hit2); range t9(hit2, hit2); range t10(hv.begin() + 33, hv.begin() + 120); range t11(hv.begin() + 90, hv.begin() + 100); range t12(hv.begin() + 200,hv.begin() + 200); ASSERT_TRUE(t1.contains(t1)) << "ivec contains1"; ASSERT_TRUE(t1.contains(t2)) << "ivec contains2"; ASSERT_TRUE(! t1.contains(t3)) << "ivec contains3"; ASSERT_TRUE(! t1.contains(t4)) << "ivec contains4"; ASSERT_TRUE(t1.contains(t5)) << "ivec contains5"; ASSERT_TRUE(t1.contains(t6)) << "ivec contains6"; ASSERT_TRUE(t1.contains(t7)) << "ivec contains7"; ASSERT_TRUE(t1.contains(t8)) << "ivec contains8"; ASSERT_TRUE(! t1.contains(t9)) << "ivec contains9"; ASSERT_TRUE(! t1.contains(t10)) << "ivec contains10"; ASSERT_TRUE(! t1.contains(t11)) << "ivec contains11"; ASSERT_TRUE(! t1.contains(t12)) << "ivec contains12"; ASSERT_TRUE(t1.contains(hv.begin() + 50)) << "ivec contains n1"; ASSERT_TRUE(t1.contains(hit1)) << "ivec contains n2"; ASSERT_TRUE(t1.contains(hv.begin() + 87)) << "ivec contains n3"; ASSERT_TRUE(! t1.contains(hv.begin() + 3)) << "ivec contains n4"; ASSERT_TRUE(! t1.contains(hv.begin() + 11)) << "ivec contains n5"; ASSERT_TRUE(! t1.contains(hit2)) << "ivec contains n6"; ASSERT_TRUE(! t1.contains(hv.begin() + 100)) << "ivec contains n7"; // overlaps range t13(hit2, hv.begin() + 99); ASSERT_TRUE(t1.overlaps(t1)) << "ivec overlaps1"; ASSERT_TRUE(t1.overlaps(t2)) << "ivec overlaps2"; ASSERT_TRUE(! t1.overlaps(t3)) << "ivec overlaps3"; ASSERT_TRUE(t1.overlaps(t4)) << "ivec overlaps4"; ASSERT_TRUE(t1.overlaps(t5)) << "ivec overlaps5"; ASSERT_TRUE(t1.overlaps(t6)) << "ivec overlaps6"; ASSERT_TRUE(t1.overlaps(t7)) << "ivec overlaps7"; ASSERT_TRUE(t1.overlaps(t8)) << "ivec overlaps8"; ASSERT_TRUE(! t1.overlaps(t9)) << "ivec overlaps9"; ASSERT_TRUE(t1.overlaps(t10)) << "ivec overlaps10"; ASSERT_TRUE(! t1.overlaps(t11)) << "ivec overlaps11"; ASSERT_TRUE(! t1.overlaps(t12)) << "ivec overlaps12"; ASSERT_TRUE(! t1.overlaps(t13)) << "ivec overlaps13"; // distance_to ASSERT_TRUE(t1.distance_to(t13) == 0) << "ivec distance_to1"; ASSERT_TRUE(t1.distance_to(t8) == -1) << "ivec distance_to2"; ASSERT_TRUE(t1.distance_to(t9) == 0) << "ivec distance_to3"; ASSERT_TRUE(t1.distance_to(t11) == 2) << "ivec distance_to4"; ASSERT_TRUE(t1.distance_to(t3) == -88) << "ivec distance_to5"; const std::vector< int* > h2(20, (int*)0); std::deque< double > h3(30, 0.0); ASSERT_TRUE(range_of(h2).begin() == h2.begin()) << "range_of1"; ASSERT_TRUE(range_of(h3).end() == h3.end()) << "range_of2"; } }; // class range_test TEST_F(range_test, global) { int_test(); iterator_test(); }