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. ) );
}
Exemplo n.º 2
0
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 ) );
}