X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=ETL%2Ftrunk%2Ftest%2Ffixed.cpp;h=965a8d30fde01b2206e3b2e2a3de88fe7bd69cfb;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=030b5c7ddacaf57f1b0ac16bcdd4f0c2ead5deb2;hpb=117425a5858bb094f2e54af5d018499ab703b227;p=synfig.git diff --git a/ETL/trunk/test/fixed.cpp b/ETL/trunk/test/fixed.cpp index 030b5c7..965a8d3 100644 --- a/ETL/trunk/test/fixed.cpp +++ b/ETL/trunk/test/fixed.cpp @@ -1,9 +1,10 @@ /*! ======================================================================== ** Extended Template and Library Test Suite ** Fixed-Point Math Test -** $Id: fixed.cpp,v 1.1.1.1 2005/01/04 01:31:48 darco Exp $ +** $Id$ ** ** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** Copyright (c) 2007 Chris Moore ** ** This package is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License as @@ -35,7 +36,7 @@ #define ADD_SUB_TEST 20000000 #define MUL_TEST 10000000 -#define DIV_TEST 10000000 +#define DIV_TEST 1048573 // at 1048573, fixed point numbers wrap around to zero using namespace etl; /* === C L A S S E S ======================================================= */ @@ -53,140 +54,65 @@ struct speed_test MyTimer.reset(); for(i=0;i(0.5)); + d=value_type(1); + const value_type one_and_a_half(static_cast(1.5)); int i; etl::clock MyTimer; MyTimer.reset(); - for(i=0;i0.0005) { fprintf(stderr,"fixed: Failed test on line %d in "__FILE__".\n",__LINE__); @@ -225,28 +151,32 @@ int basic_test(void) d-=(double)a; fprintf(stderr,"fixed: ( 1043 / 27 + 10.42 ) / 6 * PI --- Difference: %f\n",d); if(d<0.0)d=-d; +#ifdef ROUND_TO_NEAREST_INTEGER if( d>0.0005) +#else + if( d>0.0025) +#endif { fprintf(stderr,"fixed: Failed test on line %d in "__FILE__".\n",__LINE__); ret++; } - + return ret; } int char_test(void) { int ret=0; - + fixed_base fix; double flt; - + if(sizeof(fix)!=sizeof(unsigned char)) { ret++; fprintf(stderr,"fixed: Size of fixed_base is wrong!\n"); } - + flt=1.0; fix=1.0; fprintf(stderr,"fixed: value=%f, data=%d, shouldbe=%f, error=%f\n",(float)fix,fix.data(),flt,(float)fix-flt); @@ -258,15 +188,15 @@ int char_test(void) flt*=0.7; fix*=0.7; fprintf(stderr,"fixed: value=%f, data=%d, shouldbe=%f, error=%f\n",(float)fix,fix.data(),flt,(float)fix-flt); - + flt*=0.7; fix*=0.7; fprintf(stderr,"fixed: value=%f, data=%d, shouldbe=%f, error=%f\n",(float)fix,fix.data(),flt,(float)fix-flt); - + flt*=0.7; fix*=0.7; fprintf(stderr,"fixed: value=%f, data=%d, shouldbe=%f, error=%f\n",(float)fix,fix.data(),flt,(float)fix-flt); - + flt*=0.7; fix*=0.7; fprintf(stderr,"fixed: value=%f, data=%d, shouldbe=%f, error=%f\n",(float)fix,fix.data(),flt,(float)fix-flt); @@ -283,7 +213,7 @@ int char_test(void) fix*=2; fprintf(stderr,"fixed: value=%f, data=%d, shouldbe=%f, error=%f\n",(float)fix,fix.data(),flt,(float)fix-flt); - + return ret; } @@ -292,74 +222,73 @@ int char_test(void) int main() { int error=0; - + error+=basic_test(); error+=char_test(); - + speed_test float_test; speed_test int_test; speed_test fixed_test; - + { double flt,fix,inte; - fprintf(stderr,"Addition/subtraction test..."); + fprintf(stderr,"\nAddition/subtraction test...\n"); - fprintf(stderr,"calculating float..."); + fprintf(stderr," calculating float....."); flt=float_test.add_sub_test(); - fprintf(stderr,"float time: %fsec\n",flt); + fprintf(stderr," float time: %f sec\n",flt); - fprintf(stderr,"calculating fixed..."); + fprintf(stderr," calculating fixed....."); fix=fixed_test.add_sub_test(); - fprintf(stderr,"fixed time: %fsec\n",fix); + fprintf(stderr," fixed time: %f sec\n",fix); - fprintf(stderr,"calculating integer..."); + fprintf(stderr," calculating integer..."); inte=int_test.add_sub_test(); - fprintf(stderr,"integer time: %fsec\n",inte); + fprintf(stderr," integer time: %f sec\n",inte); if(flt>fix) fprintf(stderr,"Fixed point wins by %f seconds! (%f%% faster)\n",flt-fix,flt/fix*100.0f-100.0f); else fprintf(stderr,"Floating point wins by %f seconds! (%f%% faster)\n",fix-flt,fix/flt*100.0f-100.0f); - + } - + { double flt,fix,inte; - fprintf(stderr,"Product test..."); - fprintf(stderr,"calculating float..."); + fprintf(stderr,"\nProduct test...\n"); + fprintf(stderr," calculating float....."); flt=float_test.mul_test(); - fprintf(stderr,"float time: %fsec\n",flt); - fprintf(stderr,"calculating fixed..."); + fprintf(stderr," float time: %f sec\n",flt); + fprintf(stderr," calculating fixed....."); fix=fixed_test.mul_test(); - fprintf(stderr,"fixed time: %fsec\n",fix); - fprintf(stderr,"calculating integer..."); + fprintf(stderr," fixed time: %f sec\n",fix); + fprintf(stderr," calculating integer..."); inte=int_test.mul_test(); - fprintf(stderr,"integer time: %fsec\n",inte); + fprintf(stderr," integer time: %f sec\n",inte); if(flt>fix) fprintf(stderr,"Fixed point wins by %f seconds! (%f%% faster)\n",flt-fix,flt/fix*100.0f-100.0f); else fprintf(stderr,"Floating point wins by %f seconds! (%f%% faster)\n",fix-flt,fix/flt*100.0f-100.0f); - } { double flt,fix,inte; - fprintf(stderr,"Division test..."); - fprintf(stderr,"calculating float..."); + fprintf(stderr,"\nDivision test...\n"); + fprintf(stderr," calculating float....."); flt=float_test.div_test(); - fprintf(stderr,"float time: %fsec\n",flt); - fprintf(stderr,"calculating fixed..."); + fprintf(stderr," float time: %f sec\n",flt); + fprintf(stderr," calculating fixed....."); fix=fixed_test.div_test(); - fprintf(stderr,"fixed time: %fsec\n",fix); - fprintf(stderr,"calculating integer..."); + fprintf(stderr," fixed time: %f sec\n",fix); + fprintf(stderr," calculating integer..."); inte=int_test.div_test(); - fprintf(stderr,"integer time: %fsec\n",inte); + fprintf(stderr," integer time: %f sec\n",inte); if(flt>fix) fprintf(stderr,"Fixed point wins by %f seconds! (%f%% faster)\n",flt-fix,flt/fix*100.0f-100.0f); else fprintf(stderr,"Floating point wins by %f seconds! (%f%% faster)\n",fix-flt,fix/flt*100.0f-100.0f); - + fprintf(stderr,"\n"); } - + return error; }