aboutsummaryrefslogtreecommitdiff
path: root/unittest/Catch/projects/SelfTest/ApproxTests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'unittest/Catch/projects/SelfTest/ApproxTests.cpp')
-rw-r--r--unittest/Catch/projects/SelfTest/ApproxTests.cpp112
1 files changed, 112 insertions, 0 deletions
diff --git a/unittest/Catch/projects/SelfTest/ApproxTests.cpp b/unittest/Catch/projects/SelfTest/ApproxTests.cpp
new file mode 100644
index 0000000..5365659
--- /dev/null
+++ b/unittest/Catch/projects/SelfTest/ApproxTests.cpp
@@ -0,0 +1,112 @@
+/*
+ * Created by Phil on 28/04/2011.
+ * Copyright 2011 Two Blue Cubes Ltd. All rights reserved.
+ *
+ * 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 "catch.hpp"
+
+///////////////////////////////////////////////////////////////////////////////
+TEST_CASE
+(
+ "Some simple comparisons between doubles",
+ "[Approx]"
+)
+{
+ double d = 1.23;
+
+ REQUIRE( d == Approx( 1.23 ) );
+ REQUIRE( d != Approx( 1.22 ) );
+ REQUIRE( d != Approx( 1.24 ) );
+
+ REQUIRE( Approx( d ) == 1.23 );
+ REQUIRE( Approx( d ) != 1.22 );
+ REQUIRE( Approx( d ) != 1.24 );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+TEST_CASE
+(
+ "Approximate comparisons with different epsilons",
+ "[Approx]"
+ )
+{
+ double d = 1.23;
+
+ REQUIRE( d != Approx( 1.231 ) );
+ REQUIRE( d == Approx( 1.231 ).epsilon( 0.1 ) );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+TEST_CASE
+(
+ "Approximate comparisons with floats",
+ "[Approx]"
+)
+{
+ REQUIRE( 1.23f == Approx( 1.23f ) );
+ REQUIRE( 0.0f == Approx( 0.0f ) );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+TEST_CASE
+(
+ "Approximate comparisons with ints",
+ "[Approx]"
+)
+{
+ REQUIRE( 1 == Approx( 1 ) );
+ REQUIRE( 0 == Approx( 0 ) );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+TEST_CASE
+(
+ "Approximate comparisons with mixed numeric types",
+ "[Approx]"
+)
+{
+ const double dZero = 0;
+ const double dSmall = 0.00001;
+ const double dMedium = 1.234;
+
+ REQUIRE( 1.0f == Approx( 1 ) );
+ REQUIRE( 0 == Approx( dZero) );
+ REQUIRE( 0 == Approx( dSmall ).epsilon( 0.001 ) );
+ REQUIRE( 1.234f == Approx( dMedium ) );
+ REQUIRE( dMedium == Approx( 1.234f ) );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+TEST_CASE
+(
+ "Use a custom approx",
+ "[Approx][custom]"
+)
+{
+ double d = 1.23;
+
+ Approx approx = Approx::custom().epsilon( 0.005 );
+
+ REQUIRE( d == approx( 1.23 ) );
+ REQUIRE( d == approx( 1.22 ) );
+ REQUIRE( d == approx( 1.24 ) );
+ REQUIRE( d != approx( 1.25 ) );
+
+ REQUIRE( approx( d ) == 1.23 );
+ REQUIRE( approx( d ) == 1.22 );
+ REQUIRE( approx( d ) == 1.24 );
+ REQUIRE( approx( d ) != 1.25 );
+}
+
+inline double divide( double a, double b ) {
+ return a/b;
+}
+
+TEST_CASE( "Approximate PI", "[Approx][PI]" )
+{
+ REQUIRE( divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) );
+ REQUIRE( divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) );
+}