| 1 | /* Boost.MultiIndex test for comparison functions. |
| 2 | * |
| 3 | * Copyright 2003-2013 Joaquin M Lopez Munoz. |
| 4 | * Distributed under the Boost Software License, Version 1.0. |
| 5 | * (See accompanying file LICENSE_1_0.txt or copy at |
| 6 | * http://www.boost.org/LICENSE_1_0.txt) |
| 7 | * |
| 8 | * See http://www.boost.org/libs/multi_index for library home page. |
| 9 | */ |
| 10 | |
| 11 | #include "test_comparison.hpp" |
| 12 | |
| 13 | #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */ |
| 14 | #include "pre_multi_index.hpp" |
| 15 | #include "employee.hpp" |
| 16 | #include "pair_of_ints.hpp" |
| 17 | #include <boost/detail/lightweight_test.hpp> |
| 18 | |
| 19 | using namespace boost::multi_index; |
| 20 | |
| 21 | template<typename Value> |
| 22 | struct lookup_list{ |
| 23 | typedef multi_index_container< |
| 24 | Value, |
| 25 | indexed_by< |
| 26 | sequenced<>, |
| 27 | ordered_non_unique<identity<Value> > |
| 28 | > |
| 29 | > type; |
| 30 | }; |
| 31 | |
| 32 | template<typename Value> |
| 33 | struct lookup_vector{ |
| 34 | typedef multi_index_container< |
| 35 | Value, |
| 36 | indexed_by< |
| 37 | random_access<>, |
| 38 | ordered_non_unique<identity<Value> > |
| 39 | > |
| 40 | > type; |
| 41 | }; |
| 42 | |
| 43 | void test_comparison() |
| 44 | { |
| 45 | employee_set es; |
| 46 | employee_set_by_name& i1=get<1>(m&: es); |
| 47 | employee_set_by_age& i2=get<2>(m&: es); |
| 48 | employee_set_as_inserted& i3=get<3>(m&: es); |
| 49 | employee_set_by_ssn& i4=get<4>(m&: es); |
| 50 | employee_set_randomly& i5=get<5>(m&: es); |
| 51 | es.insert(x: employee(0,"Joe" ,31,1123)); |
| 52 | es.insert(x: employee(1,"Robert" ,27,5601)); |
| 53 | es.insert(x: employee(2,"John" ,40,7889)); |
| 54 | es.insert(x: employee(3,"Albert" ,20,9012)); |
| 55 | es.insert(x: employee(4,"John" ,57,1002)); |
| 56 | |
| 57 | employee_set es2; |
| 58 | employee_set_by_name& i12=get<by_name>(m&: es2); |
| 59 | employee_set_by_age& i22=get<age>(m&: es2); |
| 60 | employee_set_as_inserted& i32=get<3>(m&: es2); |
| 61 | employee_set_by_ssn& i42=get<4>(m&: es2); |
| 62 | employee_set_randomly& i52=get<5>(m&: es2); |
| 63 | es2.insert(x: employee(0,"Joe" ,31,1123)); |
| 64 | es2.insert(x: employee(1,"Robert" ,27,5601)); |
| 65 | es2.insert(x: employee(2,"John" ,40,7889)); |
| 66 | es2.insert(x: employee(3,"Albert" ,20,9012)); |
| 67 | |
| 68 | BOOST_TEST(es==es&&es<=es&&es>=es&& |
| 69 | i12==i12&& |
| 70 | i22==i22&&i22<=i22&&i22>=i22&& |
| 71 | i32==i32&&i32<=i32&&i32>=i32&& |
| 72 | i42==i42&& |
| 73 | i52==i52&&i52<=i52&&i52>=i52); |
| 74 | BOOST_TEST(es!=es2&&es2<es&&es>es2&&!(es<=es2)&&!(es2>=es)); |
| 75 | BOOST_TEST(i1!=i12); |
| 76 | BOOST_TEST(i2!=i22&&i22<i2&&i2>i22&&!(i2<=i22)&&!(i22>=i2)); |
| 77 | BOOST_TEST(i3!=i32&&i32<i3&&i3>i32&&!(i3<=i32)&&!(i32>=i3)); |
| 78 | BOOST_TEST(i4!=i42); |
| 79 | BOOST_TEST(i5!=i52&&i52<i5&&i5>i52&&!(i5<=i52)&&!(i52>=i5)); |
| 80 | |
| 81 | multi_index_container< |
| 82 | pair_of_ints, |
| 83 | indexed_by< |
| 84 | hashed_non_unique<BOOST_MULTI_INDEX_MEMBER(pair_of_ints,int,first)> |
| 85 | > |
| 86 | > hc1,hc2; |
| 87 | hc1.insert(x: pair_of_ints(0,0)); |
| 88 | hc1.insert(x: pair_of_ints(0,1)); |
| 89 | hc1.insert(x: pair_of_ints(0,2)); |
| 90 | hc1.insert(x: pair_of_ints(0,3)); |
| 91 | hc1.insert(x: pair_of_ints(1,0)); |
| 92 | hc1.insert(x: pair_of_ints(1,1)); |
| 93 | |
| 94 | hc2.insert(x: pair_of_ints(0,2)); |
| 95 | hc2.insert(x: pair_of_ints(0,1)); |
| 96 | hc2.insert(x: pair_of_ints(1,1)); |
| 97 | hc2.insert(x: pair_of_ints(1,0)); |
| 98 | hc2.insert(x: pair_of_ints(0,3)); |
| 99 | hc2.insert(x: pair_of_ints(0,0)); |
| 100 | BOOST_TEST(hc1==hc2); |
| 101 | |
| 102 | hc1.insert(x: pair_of_ints(0,4)); |
| 103 | hc2.insert(x: pair_of_ints(0,5)); |
| 104 | BOOST_TEST(hc1!=hc2); |
| 105 | |
| 106 | lookup_list<int>::type l1; |
| 107 | lookup_list<char>::type l2; |
| 108 | lookup_vector<char>::type l3; |
| 109 | lookup_list<long>::type l4; |
| 110 | lookup_vector<long>::type l5; |
| 111 | |
| 112 | l1.push_back(x: 3); |
| 113 | l1.push_back(x: 4); |
| 114 | l1.push_back(x: 5); |
| 115 | l1.push_back(x: 1); |
| 116 | l1.push_back(x: 2); |
| 117 | |
| 118 | l2.push_back(x: char(3)); |
| 119 | l2.push_back(x: char(4)); |
| 120 | l2.push_back(x: char(5)); |
| 121 | l2.push_back(x: char(1)); |
| 122 | l2.push_back(x: char(2)); |
| 123 | |
| 124 | l3.push_back(x: char(3)); |
| 125 | l3.push_back(x: char(4)); |
| 126 | l3.push_back(x: char(5)); |
| 127 | l3.push_back(x: char(1)); |
| 128 | l3.push_back(x: char(2)); |
| 129 | |
| 130 | l4.push_back(x: long(3)); |
| 131 | l4.push_back(x: long(4)); |
| 132 | l4.push_back(x: long(5)); |
| 133 | l4.push_back(x: long(1)); |
| 134 | |
| 135 | l5.push_back(x: long(3)); |
| 136 | l5.push_back(x: long(4)); |
| 137 | l5.push_back(x: long(5)); |
| 138 | l5.push_back(x: long(1)); |
| 139 | |
| 140 | BOOST_TEST(l1==l2&&l1<=l2&&l1>=l2); |
| 141 | BOOST_TEST( |
| 142 | get<1>(l1)==get<1>(l2)&&get<1>(l1)<=get<1>(l2)&&get<1>(l1)>=get<1>(l2)); |
| 143 | BOOST_TEST( |
| 144 | get<1>(l1)==get<1>(l3)&&get<1>(l1)<=get<1>(l3)&&get<1>(l1)>=get<1>(l3)); |
| 145 | BOOST_TEST(l1!=l4&&l4<l1&&l1>l4); |
| 146 | BOOST_TEST( |
| 147 | get<1>(l1)!=get<1>(l4)&&get<1>(l1)<get<1>(l4)&&get<1>(l4)>get<1>(l1)); |
| 148 | BOOST_TEST(l3!=l5&&l5<l3&&l3>l5); |
| 149 | BOOST_TEST( |
| 150 | get<1>(l3)!=get<1>(l5)&&get<1>(l3)<get<1>(l5)&&get<1>(l5)>get<1>(l3)); |
| 151 | } |
| 152 | |