| 
									
										
										
										
											2011-04-28 08:28:03 +01:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  *  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 | 
					
						
							|  |  |  | ( | 
					
						
							| 
									
										
										
										
											2013-11-19 07:21:03 +00:00
										 |  |  |     "Some simple comparisons between doubles", | 
					
						
							|  |  |  |     "[Approx]" | 
					
						
							| 
									
										
										
										
											2011-05-24 08:23:02 +01:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2011-04-28 08:28:03 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     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 ); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2011-05-24 08:23:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | TEST_CASE | 
					
						
							|  |  |  | ( | 
					
						
							| 
									
										
										
										
											2013-11-19 07:21:03 +00:00
										 |  |  |     "Approximate comparisons with different epsilons", | 
					
						
							|  |  |  |     "[Approx]" | 
					
						
							| 
									
										
										
										
											2011-05-24 08:23:02 +01:00
										 |  |  |  ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     double d = 1.23; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     REQUIRE( d != Approx( 1.231 ) ); | 
					
						
							|  |  |  |     REQUIRE( d == Approx( 1.231 ).epsilon( 0.1 ) ); | 
					
						
							| 
									
										
										
										
											2011-06-03 18:56:47 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | TEST_CASE | 
					
						
							|  |  |  | ( | 
					
						
							| 
									
										
										
										
											2013-11-19 07:21:03 +00:00
										 |  |  |     "Approximate comparisons with floats", | 
					
						
							|  |  |  |     "[Approx]" | 
					
						
							| 
									
										
										
										
											2011-06-03 18:56:47 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     REQUIRE( 1.23f == Approx( 1.23f ) ); | 
					
						
							|  |  |  |     REQUIRE( 0.0f == Approx( 0.0f ) ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | TEST_CASE | 
					
						
							|  |  |  | ( | 
					
						
							| 
									
										
										
										
											2013-11-19 07:21:03 +00:00
										 |  |  |     "Approximate comparisons with ints", | 
					
						
							|  |  |  |     "[Approx]" | 
					
						
							| 
									
										
										
										
											2011-06-03 18:56:47 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     REQUIRE( 1 == Approx( 1 ) ); | 
					
						
							|  |  |  |     REQUIRE( 0 == Approx( 0 ) ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | TEST_CASE | 
					
						
							|  |  |  | ( | 
					
						
							| 
									
										
										
										
											2013-11-19 07:21:03 +00:00
										 |  |  |     "Approximate comparisons with mixed numeric types", | 
					
						
							|  |  |  |     "[Approx]" | 
					
						
							| 
									
										
										
										
											2011-06-03 18:56:47 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     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 ) ); | 
					
						
							| 
									
										
										
										
											2011-05-24 08:23:02 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2011-06-06 08:21:21 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | TEST_CASE | 
					
						
							|  |  |  | ( | 
					
						
							| 
									
										
										
										
											2013-11-19 07:21:03 +00:00
										 |  |  |     "Use a custom approx", | 
					
						
							|  |  |  |     "[Approx][custom]" | 
					
						
							| 
									
										
										
										
											2011-06-06 08:21:21 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     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 ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-04 12:19:15 +01:00
										 |  |  | 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 ) ); | 
					
						
							|  |  |  | } |