📄 cmp_exn.cpp
字号:
/* Boost test/cmp_exn.cpp * test policies with respect to exception throwing * * Copyright 2004 Guillaume Melquiond * * 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/numeric/interval/interval.hpp>#include <boost/numeric/interval/checking.hpp>#include <boost/numeric/interval/compare.hpp>#include <boost/numeric/interval/policies.hpp>#include <boost/numeric/interval/compare/tribool.hpp>#include <boost/test/test_tools.hpp>struct my_checking{ static int nan() { return -1; } static bool is_nan(int x) { return x < 0; } static int empty_lower() { return -1; } static int empty_upper() { return -1; } static bool is_empty(int l, int u) { return l == -1 && u == -1; }};struct empty_class {};typedef boost::numeric::interval_lib::policies< empty_class, my_checking > my_policies;typedef boost::numeric::interval<int, my_policies> I;#define BOOST_C_EXN(e) \ BOOST_CHECK_THROW(e, boost::numeric::interval_lib::comparison_error)static void test_cer(){ I const a(I::empty()), b(1,2); int const c = 0, d = my_checking::nan(); using namespace boost::numeric::interval_lib::compare::certain; BOOST_C_EXN(a < b); BOOST_C_EXN(a <= b); BOOST_C_EXN(a > b); BOOST_C_EXN(a >= b); BOOST_C_EXN(a == b); BOOST_C_EXN(a != b); BOOST_C_EXN(b < a); BOOST_C_EXN(b <= a); BOOST_C_EXN(b > a); BOOST_C_EXN(b >= a); BOOST_C_EXN(b == a); BOOST_C_EXN(b != a); BOOST_C_EXN(a < c); BOOST_C_EXN(a <= c); BOOST_C_EXN(a > c); BOOST_C_EXN(a >= c); BOOST_C_EXN(a == c); BOOST_C_EXN(a != c); BOOST_C_EXN(b < d); BOOST_C_EXN(b <= d); BOOST_C_EXN(b > d); BOOST_C_EXN(b >= d); BOOST_C_EXN(b == d); BOOST_C_EXN(b != d);}static void test_def(){ I const a(I::empty()), b(1,2); int const c = 0, d = my_checking::nan(); BOOST_C_EXN(a < b); BOOST_C_EXN(a <= b); BOOST_C_EXN(a > b); BOOST_C_EXN(a >= b); BOOST_C_EXN(a == b); BOOST_C_EXN(a != b); BOOST_C_EXN(b < a); BOOST_C_EXN(b <= a); BOOST_C_EXN(b > a); BOOST_C_EXN(b >= a); BOOST_C_EXN(b == a); BOOST_C_EXN(b != a); BOOST_C_EXN(a < c); BOOST_C_EXN(a <= c); BOOST_C_EXN(a > c); BOOST_C_EXN(a >= c); BOOST_C_EXN(a == c); BOOST_C_EXN(a != c); BOOST_C_EXN(b < d); BOOST_C_EXN(b <= d); BOOST_C_EXN(b > d); BOOST_C_EXN(b >= d); BOOST_C_EXN(b == d); BOOST_C_EXN(b != d);}static void test_lex(){ I const a(I::empty()), b(1,2); int const c = 0, d = my_checking::nan(); using namespace boost::numeric::interval_lib::compare::lexicographic; BOOST_C_EXN(a < b); BOOST_C_EXN(a <= b); BOOST_C_EXN(a > b); BOOST_C_EXN(a >= b); BOOST_C_EXN(a == b); BOOST_C_EXN(a != b); BOOST_C_EXN(b < a); BOOST_C_EXN(b <= a); BOOST_C_EXN(b > a); BOOST_C_EXN(b >= a); BOOST_C_EXN(b == a); BOOST_C_EXN(b != a); BOOST_C_EXN(a < c); BOOST_C_EXN(a <= c); BOOST_C_EXN(a > c); BOOST_C_EXN(a >= c); BOOST_C_EXN(a == c); BOOST_C_EXN(a != c); BOOST_C_EXN(b < d); BOOST_C_EXN(b <= d); BOOST_C_EXN(b > d); BOOST_C_EXN(b >= d); BOOST_C_EXN(b == d); BOOST_C_EXN(b != d);}static void test_pos(){ I const a(I::empty()), b(1,2); int const c = 0, d = my_checking::nan(); using namespace boost::numeric::interval_lib::compare::possible; BOOST_C_EXN(a < b); BOOST_C_EXN(a <= b); BOOST_C_EXN(a > b); BOOST_C_EXN(a >= b); BOOST_C_EXN(a == b); BOOST_C_EXN(a != b); BOOST_C_EXN(b < a); BOOST_C_EXN(b <= a); BOOST_C_EXN(b > a); BOOST_C_EXN(b >= a); BOOST_C_EXN(b == a); BOOST_C_EXN(b != a); BOOST_C_EXN(a < c); BOOST_C_EXN(a <= c); BOOST_C_EXN(a > c); BOOST_C_EXN(a >= c); BOOST_C_EXN(a == c); BOOST_C_EXN(a != c); BOOST_C_EXN(b < d); BOOST_C_EXN(b <= d); BOOST_C_EXN(b > d); BOOST_C_EXN(b >= d); BOOST_C_EXN(b == d); BOOST_C_EXN(b != d);}static void test_set(){ I const a(I::empty()), b(1,2); int const c = 0; using namespace boost::numeric::interval_lib::compare::set; BOOST_C_EXN(a < c); BOOST_C_EXN(a <= c); BOOST_C_EXN(a > c); BOOST_C_EXN(a >= c); BOOST_C_EXN(a == c); BOOST_C_EXN(a != c); BOOST_C_EXN(b < c); BOOST_C_EXN(b <= c); BOOST_C_EXN(b > c); BOOST_C_EXN(b >= c); BOOST_C_EXN(b == c); BOOST_C_EXN(b != c);}static void test_tri(){ I const a(I::empty()), b(1,2); int const c = 0, d = my_checking::nan(); using namespace boost::numeric::interval_lib::compare::tribool; BOOST_C_EXN(a < b); BOOST_C_EXN(a <= b); BOOST_C_EXN(a > b); BOOST_C_EXN(a >= b); BOOST_C_EXN(a == b); BOOST_C_EXN(a != b); BOOST_C_EXN(b < a); BOOST_C_EXN(b <= a); BOOST_C_EXN(b > a); BOOST_C_EXN(b >= a); BOOST_C_EXN(b == a); BOOST_C_EXN(b != a); BOOST_C_EXN(a < c); BOOST_C_EXN(a <= c); BOOST_C_EXN(a > c); BOOST_C_EXN(a >= c); BOOST_C_EXN(a == c); BOOST_C_EXN(a != c); BOOST_C_EXN(b < d); BOOST_C_EXN(b <= d); BOOST_C_EXN(b > d); BOOST_C_EXN(b >= d); BOOST_C_EXN(b == d); BOOST_C_EXN(b != d);}int test_main(int, char *[]) { test_cer(); test_def(); test_lex(); test_pos(); test_set(); test_tri(); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -