void TestConstructors() { Meter const default_constructor; Assert( fequal( default_constructor.GetValue(), 0. ) ); Meter const explicit_constructor_with_scalar( 2. ); Assert( fequal( explicit_constructor_with_scalar.GetValue(), 2. ) ); Kilometer const one_kilometer( 1. ); Meter unit_1000_meter = one_kilometer; Assert( fequal( unit_1000_meter.GetValue(), 1000. ) ); Foot const one_foot( 1. ); Meter const _dot_3048_meter = (Inch)one_foot; Assert( fequal( _dot_3048_meter.GetValue(), .3048 ) ); Meter const copy_constructor = explicit_constructor_with_scalar; Assert( fequal( copy_constructor.GetValue(), 2. ) ); }
void TestSimple_Exp1_F() { OutputLine( L" -- Test Simple<S<T,1>,F> form. --" ); volatile Scalar s = 0; clock_t const startraw = clock(); for( int x = 0; x < nbloop; ++x ) { volatile Scalar s0; volatile Scalar const s1 = 2.; volatile Scalar const s2 = s1; volatile Scalar const s3 = s1 + s2; volatile Scalar const s4 = s1 * 2.; volatile Scalar const s5 = 1. * 1000.; s0 = 2. * nbloop; s0 += s1; s0 -= s5; s += s0 + s1 + s2 + s3 + s4 + s5; } clock_t const endraw = clock(); Meter m; clock_t const startunit = clock(); for( int y = 0; y < nbloop; ++y ) { Meter m0; Meter const m1( 2. ); Meter const m2 = m1; Meter const m3 = m1 + m2; Meter const m4 = m1 * 2.; Meter const m5 = Kilometer( 1. ); m0 = 2. * nbloop; m0 += m1; m0 -= m5; m += m0 + m1 + m2 + m3 + m4 + m5; } clock_t const endunit = clock(); if( m.GetValue() != s ) { OutputLine( L"Implementation error while processing test." ); } PrintPerformance( endraw - startraw, endunit - startunit ); }
void TestMathematicalBinaryOperators() { Kilometer const unit_10_kilometer( 10. ); Kilometer const unit_9_kilometer( 9. ); Hectometer const unit_200_hectometer = unit_10_kilometer + unit_10_kilometer; Assert( fequal( unit_200_hectometer.GetValue(), 200. ) ); Hectometer const unit_10_hectometer = unit_10_kilometer - unit_9_kilometer; Assert( fequal( unit_10_hectometer.GetValue(), 10. ) ); Meter const unit_31000_meter = unit_10_kilometer + unit_200_hectometer + unit_10_hectometer; Assert( fequal( unit_31000_meter.GetValue(), 31000. ) ); Scalar const unit_20_ = unit_200_hectometer / unit_10_hectometer; Assert( fequal( unit_20_, 20. ) ); Scalar const unit_2_ = unit_200_hectometer / unit_10_kilometer; Assert( fequal( unit_2_, 2. ) ); }
void TestClassDefinition() { Femtometer const femtometer( 1. ); Assert( fequal( femtometer.GetValue(), 1. ) ); Assert( fequal( femtometer.GetConvertedValue(), 1.e-15 ) ); Assert( fequal( femtometer.GetFactor(), 1.e-15 ) ); Picometer const picometer( 1. ); Assert( fequal( picometer.GetValue(), 1. ) ); Assert( fequal( picometer.GetConvertedValue(), 1.e-12 ) ); Assert( fequal( picometer.GetFactor(), 1.e-12 ) ); Nanometer const nanometer( 1. ); Assert( fequal( nanometer.GetValue(), 1. ) ); Assert( fequal( nanometer.GetConvertedValue(), 1.e-9 ) ); Assert( fequal( nanometer.GetFactor(), 1.e-9 ) ); Micrometer const micrometer( 1. ); Assert( fequal( micrometer.GetValue(), 1. ) ); Assert( fequal( micrometer.GetConvertedValue(), 1.e-6 ) ); Assert( fequal( micrometer.GetFactor(), 1.e-6 ) ); Millimeter const millimeter( 1. ); Assert( fequal( millimeter.GetValue(), 1. ) ); Assert( fequal( millimeter.GetConvertedValue(), .001 ) ); Assert( fequal( millimeter.GetFactor(), .001 ) ); Centimeter const centimeter( 1. ); Assert( fequal( centimeter.GetValue(), 1. ) ); Assert( fequal( centimeter.GetConvertedValue(), .01 ) ); Assert( fequal( centimeter.GetFactor(), .01 ) ); Decimeter const decimeter( 1. ); Assert( fequal( decimeter.GetValue(), 1. ) ); Assert( fequal( decimeter.GetConvertedValue(), .1 ) ); Assert( fequal( decimeter.GetFactor(), .1 ) ); Meter const meter( 1. ); Assert( fequal( meter.GetValue(), 1. ) ); Assert( fequal( meter.GetConvertedValue(), 1. ) ); Assert( fequal( meter.GetFactor(), 1. ) ); long const l = sizeof( Meter ); long const l2 = sizeof( Kilometer ); long const l3 = sizeof( meter ); Assert( l == l2 && l == l3 ); Dekameter const dekameter( 1. ); Assert( fequal( dekameter.GetValue(), 1. ) ); Assert( fequal( dekameter.GetConvertedValue(), 10. ) ); Assert( fequal( dekameter.GetFactor(), 10. ) ); Hectometer const hectometer( 1. ); Assert( fequal( hectometer.GetValue(), 1. ) ); Assert( fequal( hectometer.GetConvertedValue(), 100. ) ); Assert( fequal( hectometer.GetFactor(), 100. ) ); Kilometer const kilometer( 1. ); Assert( fequal( kilometer.GetValue(), 1. ) ); Assert( fequal( kilometer.GetConvertedValue(), 1000. ) ); Assert( fequal( kilometer.GetFactor(), 1000. ) ); Megameter const megameter( 1. ); Assert( fequal( megameter.GetValue(), 1. ) ); Assert( fequal( megameter.GetConvertedValue(), 1.e6 ) ); Assert( fequal( megameter.GetFactor(), 1.e6 ) ); Gigameter const gigameter( 1. ); Assert( fequal( gigameter.GetValue(), 1. ) ); Assert( fequal( gigameter.GetConvertedValue(), 1.e9 ) ); Assert( fequal( gigameter.GetFactor(), 1.e9 ) ); Terameter const terameter( 1. ); Assert( fequal( terameter.GetValue(), 1. ) ); Assert( fequal( terameter.GetConvertedValue(), 1.e12 ) ); Assert( fequal( terameter.GetFactor(), 1.e12 ) ); Petameter const petameter( 1. ); Assert( fequal( petameter.GetValue(), 1. ) ); Assert( fequal( petameter.GetConvertedValue(), 1.e15 ) ); Assert( fequal( petameter.GetFactor(), 1.e15 ) ); Mil const mil( 1. ); Assert( fequal( mil.GetValue(), 1. ) ); Assert( fequal( mil.GetConvertedValue(), .0000254 ) ); Assert( fequal( mil.GetFactor(), .0000254 ) ); Inch const inch( 1. ); Assert( fequal( inch.GetValue(), 1. ) ); Assert( fequal( inch.GetConvertedValue(), .0254 ) ); Assert( fequal( inch.GetFactor(), .0254 ) ); Foot const foot( 1. ); Assert( fequal( foot.GetValue(), 1. ) ); Assert( fequal( foot.GetConvertedValue(), .3048 ) ); Assert( fequal( foot.GetFactor(), .3048 ) ); }