📄 variant_comparison_test.cpp
字号:
//-----------------------------------------------------------------------------// boost-libs variant/test/variant_comparison_test.cpp source file// See http://www.boost.org for updates, documentation, and revision history.//-----------------------------------------------------------------------------//// Copyright (c) 2003// Eric Friedman, Itay Maman//// Distributed under the Boost Software License, Version 1.0. (See// accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)#include "boost/variant/variant.hpp"#include "boost/test/minimal.hpp"#include <iostream>#include <sstream>#include <string>#include <algorithm>#include <vector>#include "boost/detail/workaround.hpp"#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0551))# pragma warn -lvc // temporary used for parameter warning#endiftemplate <typename T>void assert_equality_comparable( const T& x, const T& y, const T& z ){ // identity check BOOST_CHECK( !(&x == &y) || (x == y) ); BOOST_CHECK( !(&x == &z) || (x == z) ); BOOST_CHECK( !(&y == &z) || (y == z) ); // reflexivity check BOOST_CHECK( (x == x) ); BOOST_CHECK( (y == y) ); BOOST_CHECK( (z == z) ); // symmetry check BOOST_CHECK( !(x == y) || (y == x) ); BOOST_CHECK( !(y == x) || (x == y) ); BOOST_CHECK( !(x == z) || (z == x) ); BOOST_CHECK( !(z == x) || (x == z) ); BOOST_CHECK( !(y == z) || (z == y) ); BOOST_CHECK( !(z == y) || (y == z) ); // transitivity check BOOST_CHECK( !(x == y && y == z) || (x == z) ); BOOST_CHECK( !(x == z && z == y) || (x == y) ); BOOST_CHECK( !(y == z && z == x) || (y == x) );}template <typename T>void assert_less_than_comparable( const T& x, const T& y, const T& z ){ // irreflexivity check BOOST_CHECK( !(x < x) ); BOOST_CHECK( !(y < y) ); BOOST_CHECK( !(z < z) ); // transitivity check BOOST_CHECK( (x < y) ); BOOST_CHECK( (y < z) ); BOOST_CHECK( (x < z) ); // antisymmetry check BOOST_CHECK( !(y < x) ); BOOST_CHECK( !(z < y) ); BOOST_CHECK( !(z < x) );}template <typename It>std::string print_range(It first, It last){ std::ostringstream result; while (first != last) { result << *first << ' '; ++first; } return result.str();}int test_main(int , char* []){ typedef boost::variant<int, std::string> var_t; var_t var1(3); var_t var2(5); var_t var3("goodbye"); var_t var4("hello"); assert_equality_comparable(var1, var1, var1); assert_equality_comparable(var_t(var1), var_t(var1), var_t(var1)); assert_equality_comparable(var1, var2, var3); assert_less_than_comparable(var1, var2, var3); assert_less_than_comparable(var2, var3, var4); std::vector<var_t> vec; vec.push_back( var3 ); vec.push_back( var2 ); vec.push_back( var4 ); vec.push_back( var1 ); std::sort(vec.begin(), vec.end()); std::string sort_result( print_range(vec.begin(), vec.end()) ); BOOST_CHECK( sort_result == "3 5 goodbye hello " ); return boost::exit_success;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -