In libs/interval/test/
and
libs/interval/examples/
are some test and example programs.. The
examples illustrate a few uses of intervals. For a general description and
considerations on using this library, and some potential domains of
application, please read this mini-guide.
The test programs are as follows. Please note that they require the use of
the Boost.test library and can be automatically tested by using
bjam
(except for interval_test.cpp).
add.cpp tests if the additive and substractive operators and the respective _std and _opp rounding functions are correctly implemented. It is done by using symbolic expressions as a base type.
cmp.cpp and cmp_lex.cpp test if the operators
<
>
<=
>=
==
!=
behave correctly for the default comparison
and the lexicographic comparison. cmp_exp.cpp tests the explicit
comparison functions cer..
and pos..
behave
correctly. All these tests use some simple intervals ([1,2] and [3,4], [1,3]
and [2,4], [1,2] and [2,3], etc).
det.cpp tests if the _std
and _opp
versions in protected and unprotected mode produce the same result when Gauss
scheme is used on an unstable matrix (in order to exercise rounding). The
tests are done for interval<float>
and
interval<double>
.
fmod.cpp defines a minimalistic version of
interval<int>
and uses it in order to test
fmod
on some specific interval values.
mul.cpp exercices the multiplication, the finite division, the square and the square root with some integer intervals leading to exact results.
pi.cpp tests if the interval value of π (for
int
, float
and double
base types)
contains the number π (defined with 21 decimal digits) and if it is a
subset of [π±1ulp] (in order to ensure some precision).
pow.cpp tests if the pow
function behaves correctly on
some simple test cases.
test_float.cpp exercises the arithmetic operations of the library for floating point base types.
interval_test.cpp tests if the interval library respects the
inclusion property of interval arithmetic by computing some functions and
operations for both double
and
interval<double>
.
findroot_demo.cpp finds zeros of some functions by using dichotomy and even produces gnuplot datas for one of them. The processor has to correctly handle elementary functions for this example to properly work.
horner.cpp is a really basic example of unprotecting the interval operations for a whole function (which computes the value of a polynomial by using Horner scheme).
newton-raphson.cpp is a (bad) implementation of a specialized version of Newton-Raphson algorithm for finding the zeros of a function knowing its derivative. It exercises unprotecting, full division, some set operations and empty intervals.
interval_speed.cpp is not really an example but more like a
benchmark for testing performance of the library. It needs to be compiled
with -DUSE_BOOST
. The compilation option
-DUSE_BOOST_UNPROTECTED
allows the program to use unprotected
local rounding, leading to better performance.
Revised: 2002-12-15
Copyright (c) Guillaume Melquiond, Sylvain Pion, Hervé Brönnimann, 2002.
Polytechnic University.