CenterFocusTestUnit.h

Go to the documentation of this file.
00001         #ifndef STRUDEL_TEST_H
00002 #define STRUDEL_TEST_H
00003 
00004 
00005 #include "fast_Ring.h"
00006 // #include "eps/finite_field.h"
00007 
00008 
00009 
00011 // Parameter 1 : Eingabedatei 
00012 // Ausgabe als extra Funktion
00013 
00014 
00015 using namespace std;
00016 
00017 namespace nCenterFocus
00018 {
00019 // forward declaration:
00020 int centerfocus(int argc, const char* argv[]);
00021 
00022 
00023 
00024 //------------------------------------------------------------------------------------------------------------------------
00025 
00026 template<class TPolynomdefs>
00027 void templatedPolynomDefsSingleTest(TPolynomdefs &defs)
00028 {
00029         int indexArray[defs.getSize() ];
00030 
00031         int index;
00032         for (int currIndex=0; currIndex < defs.getSize() ; currIndex++)
00033         {
00034                 indexArray[currIndex]=0;
00035         }
00036 
00037         for (int currDegree=0; currDegree <= defs.maxdegree_m; currDegree++)
00038         {
00039                 for (int yexp=0; yexp <= currDegree; yexp++)
00040                 {
00041                         index = defs.getPairIndex(currDegree-yexp,yexp);
00042                         assert( index< defs.getSize() );
00043                         assert( indexArray[ index ] == 0 );
00044                         indexArray[ index ] = 1 ;
00045                 }
00046         }
00047 }
00048 
00049 template<template<int> class  TPolynomdefs>
00050 void testStaticPolynomDefs()
00051 {
00052 
00053         cerr << "testPolynomDefs        " << endl;
00054 
00055         TPolynomdefs<0> defs0;
00056         TPolynomdefs<1> defs1;
00057         TPolynomdefs<2> defs2;
00058         TPolynomdefs<3> defs3;
00059         TPolynomdefs<4> defs4;
00060 
00061         templatedPolynomDefsSingleTest(defs0);
00062         templatedPolynomDefsSingleTest(defs1);
00063         templatedPolynomDefsSingleTest(defs2);
00064         templatedPolynomDefsSingleTest(defs3);
00065         templatedPolynomDefsSingleTest(defs4);
00066 
00067 
00068         /*
00069         cerr << "nextpow2num<3>::value" << nextpow2num<3>::value << endl;
00070         cerr << " 3 <<needbits<3>::value |3 " << (3 <<needbits<3>::value |3) +1 << endl;
00071         cerr << " defs3.size " <<  defs3.size  << endl;
00072         cerr << "nextpow2num<4>::value" << nextpow2num<4>::value << endl;
00073         cerr << "needbits<3>::value" << needbits<3>::value << endl;
00074         cerr << "needbits<4>::value" << needbits<4>::value << endl;
00075         cerr << " 4 <<needbits<4>::value |4 " << (4 <<needbits<4>::value |4 ) +1 << endl;
00076         cerr << " defs4.size " <<  defs4.size  << endl;
00077         */
00078 }
00079 template< class  TPolynomdefs>
00080 void testDynamicPolynomDefs()
00081 {
00082         cerr << "testDynamicPolynomDefs " << endl;
00083 
00084         TPolynomdefs defs0(0);
00085         TPolynomdefs defs1(1);
00086         TPolynomdefs defs2(2);
00087         TPolynomdefs defs3(3);
00088         TPolynomdefs defs4(4);
00089 
00090         templatedPolynomDefsSingleTest(defs0);
00091         templatedPolynomDefsSingleTest(defs1);
00092         templatedPolynomDefsSingleTest(defs2);
00093         templatedPolynomDefsSingleTest(defs3);
00094         templatedPolynomDefsSingleTest(defs4);
00095 }
00096 
00097 void testAllStaticPolynomDefs()
00098 {
00099         testStaticPolynomDefs< polynomdefs >();
00100         testStaticPolynomDefs< polynomdefsNoShift >();
00101         testStaticPolynomDefs< polynomdefsNew >();
00102         testStaticPolynomDefs< polynompairdefs >();
00103 }
00104 
00105 void testAllDynamicPolynomDefs()
00106 {
00107         testDynamicPolynomDefs< dynamicPolynomdefsNoShift >();
00108         testDynamicPolynomDefs< dynamicPolynomdefsNoShiftNoMemoryHoles >();
00109         //testDynamicPolynomDefs< polynomdefsNew >();
00110 }
00111 
00112 
00113 void testAllPolynomDefs()
00114 {
00115         testAllStaticPolynomDefs();
00116         testAllDynamicPolynomDefs();
00117 }
00118 
00119 //------------------------------------------------------------------------------------------------------------------------
00120 
00121 bool testTrim()
00122 {
00123         return (                trim( string( " D D ") ).compare( string("D D") )==0 
00124                         &&      trim( string( "nothing to trim") ).compare(string("nothing to trim"))==0  
00125                         &&      ltrim( string( " D D ") ).compare( string("D D ") )==0
00126                         &&      rtrim( string( " D D ") ).compare( string(" D D") )==0
00127                 );
00128 }
00129 //------------------------------------------------------------------------------------------------------------------------
00130 bool testExample()
00131 {
00132                 
00133         int _argc = 4;
00134 
00135         const char** _argv= new  const char*[_argc+1];
00136         
00137         //std::stringstream sstream;
00138         //sstream << characteristic;
00139         
00140         _argv[0]="centerfocus";
00141         _argv[1]="+";
00142         _argv[2]="output";
00143         //_argv[2]=(char*) sstream.str().c_str(); so geht es definitiv nicht - wieso nicht?
00144 
00145 std::stringstream pstream;
00146 
00147 #ifdef OPTIMIZED_FIELD
00148         pstream << FIELDCHAR;
00149 #else
00150         pstream << 29;
00151 #endif
00152 
00153         _argv[3]        =       (string("-- TestExample         \n\
00154                                 p       = ")+pstream.str()+string(";    \n\
00155                                 minNullen       = 9;    -- search for examples where first 'minNullen' focal values vanishes\n \
00156                                 minJRank        = 9;    -- search for examples where jacobian matrix has a rank greater or equal to 'minRank'\n \
00157                                 minJSubMatrixRank = 9;  -- search for examples where jacobian matrix has a rank greater or equal to 'minRank'\n \
00158                                 jacobi  = true;         -- perform jacobi matrix rank check (true/false)\n \
00159                                 jacobiUnterMatrix       = false;        --\n\
00160                                 anzZufall       = 1;    -- number of random experiments to perform\n\
00161                                 grad    = 3;    -- maximal polynomial degree of p,q\n\
00162                                 epsilon         = true;         -- compute with epsilon\n\
00163                                 epsPrecision    = 1;    -- epsilon precision size (currenly only 0 and 1 supported)\n\
00164                                 randomSeed      = -30;  -- starting random seed, see 'zeitAlsZufall'\n\
00165                                 rechneBisMaxStrudel     = false;        -- 'false': abort focal values computation of a example if a value does not vanish; 'true': compute all 'maxStrudel' focal values\n\
00166                                 benutzeFormel1  = true;         -- compute q(3,0) in a kind that first focal value vanish\n\
00167                                 benutzeFormel2  = true;         -- compute p(3,0) in a kind that second focal value vanish\n\
00168                                 hamilton        = true;         -- true: don't filter Hamilton components\n\
00169                                 zeitAlsZufall   = false;        -- false: use inital seed for random function given in 'zufallInit'; true: use timer as initial seed\n\
00170                                 \n\
00171                                 \n\
00172                                 L = { { {\n\
00173                                                         {27, 9, 22},            \n\
00174                                                         {3, 8, 5},              \n\
00175                                                         {11, 20, 4, 3},         \n\
00176                                                         {3, 25, 20, 18}         \n\
00177                                                 }\n\
00178                                         }\n\
00179                                 } \n ")).c_str();
00180 
00182         centerfocus(_argc,_argv);
00183         //exit(0);
00184         return false;
00185 }
00186 
00189 
00190 bool testParameterParser01()
00191 {
00192                 
00193         int _argc = 4;
00194 
00195         const char** _argv= new  const char*[_argc+1];
00196         
00197         //std::stringstream sstream;
00198         //sstream << characteristic;
00199         
00200         _argv[0]="centerfocus";
00201         _argv[1]="+";
00202         _argv[2]="output";
00203         //_argv[2]=(char*) sstream.str().c_str(); so geht es definitiv nicht - wieso nicht?
00204         
00205 std::stringstream pstream;
00206 
00207 #ifdef OPTIMIZED_FIELD
00208         pstream << FIELDCHAR;
00209 #else
00210         pstream << 29;
00211 #endif
00212 string arg3(string("-- TestExample      \n\
00213                                 p       = ") +pstream.str()+string(";   \n\
00214                                 minNullen       = 9;    -- search for examples where first 'minNullen' focal values vanishes\n \
00215                                 minJRank        = 9;    -- search for examples where jacobian matrix has a rank greater or equal to 'minRank'\n \
00216                                 minJSubMatrixRank = 9;  -- search for examples where jacobian matrix has a rank greater or equal to 'minRank'\n \
00217                                 jacobi  = true;         -- perform jacobi matrix rank check (true/false)\n \
00218                                 jacobiUnterMatrix       = false;        --\n\
00219                                 anzZufall       = 1;    -- number of random experiments to perform\n\
00220                                 grad    = 3;    -- maximal polynomial degree of p,q\n\
00221                                 epsilon         = true;         -- compute with epsilon\n\
00222                                 epsPrecision    = 5;    -- epsilon precision size (currenly only 0 and 1 supported)\n\
00223                                 randomSeed      = -30;  -- starting random seed, see 'zeitAlsZufall'\n\
00224                                 rechneBisMaxStrudel     = false;        -- 'false': abort focal values computation of a example if a value does not vanish; 'true': compute all 'maxStrudel' focal values\n\
00225                                 benutzeFormel1  = true;         -- compute q(3,0) in a kind that first focal value vanish\n\
00226                                 benutzeFormel2  = false;        -- compute p(3,0) in a kind that second focal value vanish\n\
00227                                 hamilton        = true;         -- true: don't filter Hamilton components\n\
00228                                 zeitAlsZufall   = false;        -- false: use inital seed for random function given in 'zufallInit'; true: use timer as initial seed\n\
00229                                 ergebnisDatenAnhaengen  = true;-- \n\
00230                                 \n\
00231                                 \n\
00232                                 L = { { {\n\
00233                                                         {27, 9, 22},            \n\
00234                                                         {3, 8, 5},              \n\
00235                                                         {11, 20, 4, 3},         \n\
00236                                                         {3, 25, 20, A}  \n\
00237                                                 }\n\
00238                                         }\n\
00239                                 } ;\n ")) ;
00240 
00241           char * a = new char [arg3.size()];
00242 
00243         strcpy(a, arg3.c_str() );
00244         
00245         _argv[3] = a;
00246 
00248         D_CenterfocusParams* params= new D_CenterfocusParams(_argc, _argv);
00249         assert( params->inputFromStd()==false); 
00250 #ifdef OPTIMIZED_FIELD
00251          
00252 assert( params->getFieldCharacteristic()==FIELDCHAR );
00253 #else
00254 assert( params->getFieldCharacteristic()==29 );
00255 #endif
00256         
00257 
00258         assert( params->getEpsPrecision()==5 );
00259         
00260         assert( params->getRequestedTrialsNum()==1 );
00261 
00262         assert( params->getPolynomialDegree()==3 );
00263 
00264         //assert( params->checkJacobianRank()==true );
00265 
00266         assert( params->getMaxFocalValuesToCompute()== (params->getFieldCharacteristic() - 1 )/2 -1 );
00267 
00268         assert( params->getRequiredFullJacobianMinRank()==9 );
00269 
00270         assert( params->requiredVanishedFocalValuesNum()==9 );
00271 
00272         assert( params->getRandomSeedRef()==-30 );
00273 
00274         assert(*(params->getRandomSeedPtr() )==-30 );
00275 
00276         assert( params->bInitRandomFromTime()==false );
00277 
00278         assert( params->useFormula1()==true );
00279 
00280         assert( params->useFormula2()==false );
00281 
00282  
00283 
00284 //      assert( params->computeQuadric()==true );
00285 
00286         //assert( params->filterHamilton()==false );
00287 
00288         //assert ( params->computeAllFocalValues()==false ); // = rechne bis MaxStrudel
00289 
00290         //assert( params->jacobiSubMatrix()==false ); 
00291 
00292         assert( params->readNextPolynoms()==true );
00293 
00294         assert( params->polynomsHaveRandomCoeff()==false );     
00295 
00296         assert( params->polynomsHaveCheckAllCoeff()==true );    
00297 
00298          D_CenterfocusParams::PolynomXY_Type  minusPolynomp = params->getMinusPPolynomRef();
00299 
00300          D_CenterfocusParams::PolynomXY_Type::CoefficientType coeff (params->getRing()->getField()->Convert(27) );
00301 
00302         assert((int) coeff.getX()==(params->getRing()->getField()->Convert(27)) );
00303 
00304         const D_CenterfocusParams::RingType * ring = params->getRing();
00305 
00306         assert(minusPolynomp.getCoeff( 2,0 ) == ring->addInv(coeff) );
00307 
00308         coeff.setX(22);
00309 
00310         assert(   minusPolynomp.getCoeff( 0,2 )  == ring->addInv(coeff) );
00311 
00312         coeff.setX(11);
00313         assert(   minusPolynomp.getCoeff( 3,0 )  == ring->addInv(coeff) );
00314 
00315 
00316         cerr << " -- Test " << __FUNCTION__ << " passed !" << endl;
00317         return true;
00318 }
00319 
00320 
00321 template<class FrommerType>
00322 void frommer_TestNo1(FrommerType & frommer)
00323 {
00324         const typename  FrommerType::RingType & ring = frommer.getRingRef();
00325 
00326         string  minusP_String(" { {-1, 0}, {4, 0, 1} }");
00327         string  q_String(" { {0,1}, {1, 0, -2} }");
00328 
00329         
00330 
00331         typename FrommerType::TPolynomXY
00332         minus_polynom_P         = createFromString<typename  FrommerType::TPolynomXY>( minusP_String, ring);
00333 
00334         typename FrommerType::TPolynomXY
00335         polynom_Q               = createFromString<typename  FrommerType::TPolynomXY>( q_String, ring);
00336 
00337         std::cerr << "minusP_String" << minusP_String << endl;
00338         std::cerr << "minus_polynom_P" << minus_polynom_P << endl;
00339         
00340         std::cerr << "q_String" << q_String << endl;
00341         std::cerr << "polynom_Q" << polynom_Q << endl;
00342 
00343         frommer.setPolynoms( &minus_polynom_P , & polynom_Q );
00344         frommer.doit(false);
00345         
00346         typename FrommerType::TPolynomXY::CoefficientType  firstFocalValue = frommer.getFocalValue(1);
00347         
00348         //cerr << "firstFocalValue: " << firstFocalValue << endl;
00349         assert(firstFocalValue== ring.Convert(4) );
00350 }
00351 
00352 
00353 template<class FrommerType>
00354 void frommer_TestNo2(FrommerType & frommer)
00355 {
00356         const typename  FrommerType::RingType & ring = frommer.getRingRef();
00357         
00358 
00359         string  minusP_String(" { {-1, 0}, {-1, -2, 1} }");
00360         string  q_String(" { {0,  1}, { 0, -2, 1} }");
00361         typename FrommerType::TPolynomXY
00362         minus_polynom_P         = createFromString<typename  FrommerType::TPolynomXY>(minusP_String, ring);
00363         
00364         typename FrommerType::TPolynomXY
00365         polynom_Q               = createFromString<typename  FrommerType::TPolynomXY>(q_String, ring);
00366         
00367         frommer.setPolynoms( &minus_polynom_P , & polynom_Q );
00368 
00369         frommer.doit(false);
00370 
00371         //2.Strudelgröße = -14/15     
00372         typename FrommerType::TPolynomXY::CoefficientType referenceResult = ring.addInv (       ring.multiply(ring.Convert(14), 
00373                                                                                                 ring.multInv(ring.Convert(15).getX() ) ) 
00374                                                                                         );
00375         
00376         typename FrommerType::TPolynomXY::CoefficientType  secondFocalValue = frommer.getFocalValue(2);
00377 
00378         assert(secondFocalValue == referenceResult);
00379 }
00380 
00381 template<class FrommerType>
00382 void frommer_TestNo3(FrommerType & frommer)
00383 {
00384         const typename FrommerType::RingType & ring = frommer.getRingRef();
00385         
00386 
00387         string  minusP_String(" { {-1, 0}, {-4, 0, -1}, {-2, 0, 0, 2} }");
00388         string  q_String(" { {0, 1}, {1, 0, -2}, {2, 0, 0, -2} }");
00389         typename  FrommerType::TPolynomXY               
00390         minus_polynom_P         = createFromString<typename  FrommerType::TPolynomXY>(minusP_String, ring);
00391 
00392         typename  FrommerType::TPolynomXY 
00393         polynom_Q               = createFromString<typename  FrommerType::TPolynomXY>(q_String, ring);
00394 
00395         frommer.setPolynoms( &minus_polynom_P , & polynom_Q );
00396         frommer.doit(false);
00397         
00398         for (int currFocalValue=1; currFocalValue<=frommer.getMaxFocalValuesToCompute(); currFocalValue++)
00399         {
00400                         typename FrommerType::TPolynomXY::CoefficientType  focalValue = frommer.getFocalValue(currFocalValue);
00401                         assert(focalValue== ring.Convert(0) );
00402         }
00403 }
00404 
00405 
00406 template<class FrommerType>
00407 void frommer_TestNo4_a(FrommerType & frommer)
00408 {
00409         const typename  FrommerType::RingType & ring = frommer.getRingRef();
00410         
00411 
00412         string  minusP_String(" { {-1, 0}, {0, 0, 0}, {-2, 0, 0, -1} }");
00413         string  q_String(" { {0, 1}, {0, 0, 0}, {0, 1, 0, 1} }");
00414         typename  FrommerType::TPolynomXY                       
00415         minus_polynom_P         = createFromString<typename  FrommerType::TPolynomXY>(minusP_String, ring);
00416 
00417         typename  FrommerType::TPolynomXY        
00418         polynom_Q               = createFromString<typename  FrommerType::TPolynomXY>(q_String, ring);
00419 
00420         frommer.setPolynoms( &minus_polynom_P , & polynom_Q );
00421         frommer.doit(false);
00422         
00423         
00424         typename FrommerType::TPolynomXY::CoefficientType  focalValue = frommer.getFocalValue(1);
00425         assert(focalValue==ring.addInv( ring.Convert(1).getX() ) );
00426         
00427 }
00428 
00429 
00430 template<class FrommerType>
00431 void frommer_TestNo4_b(FrommerType & frommer)
00432 {
00433         const typename  FrommerType::RingType & ring = frommer.getRingRef();
00434         
00435 
00436         string  minusP_String(" { {-1, 0}, {0, 0, 0}, {0, -4, 0, -1} }");
00437         string  q_String(" { {0, 1}, {0, 0, 0}, {2, 0, 1, 0} }");
00438         typename  FrommerType::TPolynomXY                       
00439         minus_polynom_P         = createFromString<typename  FrommerType::TPolynomXY>(minusP_String, ring);
00440 
00441         typename  FrommerType::TPolynomXY        
00442         polynom_Q               = createFromString<typename  FrommerType::TPolynomXY>(q_String, ring);
00443 
00444         frommer.setPolynoms( &minus_polynom_P , & polynom_Q );
00445         frommer.doit(false);
00446         
00447         //1. Strudelgroese = 44/35      
00448         typename FrommerType::TPolynomXY::CoefficientType referenceResult =     ring.multiply(  ring.Convert(44), 
00449                                                                                                                                 ring.multInv(ring.Convert(35).getX() )  
00450                                                                                                                         );
00451         cerr << "ring.Convert(44) " << ring.Convert(44) << endl;
00452         cerr << "ring.multInv(ring.Convert(35) ) " << ring.multInv(ring.Convert(35).getX() ) << endl;
00453         cerr << "referenceResult " << referenceResult << endl;
00454         typename FrommerType::TPolynomXY::CoefficientType  focalValue = frommer.getFocalValue(1);
00455         for (int currFocalValue=1; currFocalValue<=frommer.getComputedFocalValuesNum(); currFocalValue++)
00456         {
00457                 focalValue = frommer.getFocalValue(currFocalValue);
00458                 cerr << "focalValue " << focalValue << endl;
00459         }
00460         focalValue = frommer.getFocalValue(3);
00461         cerr << "focalValue " << focalValue << endl;
00462         assert( focalValue == referenceResult );
00463 }
00464 //1. Strudelgröße = 44/35
00465 
00466 
00467 template<class FrommerType>
00468 void frommer_TestNo5(FrommerType & frommer)
00469 {
00470         const typename  FrommerType::RingType & ring = frommer.getRingRef();
00471         
00472 
00473         string  minusP_String(" { {-1, 0}, {0, 0, 0}, {0, -4, 0, -1},  {0, 0, -2, 0, 0, 0} }");
00474         string  q_String(" { {0, 1}, {0, 0, 0}, {2, 0, 1, 0} ,  {0, 2, 0, 0, 0 ,0} }");
00475         typename  FrommerType::TPolynomXY                       
00476         minus_polynom_P         = createFromString<typename  FrommerType::TPolynomXY>(minusP_String, ring);
00477 
00478         typename  FrommerType::TPolynomXY        
00479         polynom_Q               = createFromString<typename  FrommerType::TPolynomXY>(q_String, ring);
00480 
00481         frommer.setPolynoms( &minus_polynom_P , & polynom_Q );
00482         frommer.doit(false);
00483         
00484         
00485         for (int currFocalValue=1; currFocalValue<=frommer.getMaxFocalValuesToCompute(); currFocalValue++)
00486         {
00487                         typename FrommerType::TPolynomXY::CoefficientType  focalValue = frommer.getFocalValue(currFocalValue);
00488                         assert(focalValue==ring.Convert(0));
00489         }
00490 }
00491 
00492 template<class FrommerType>
00493 void frommer_TestNo6(FrommerType & frommer)
00494 {
00495         const typename  FrommerType::RingType & ring = frommer.getRingRef();
00496         
00497 
00498         string  minusP_String(" { {-1, 0}, { -1,0,0,0,0,0,0,0}, { 0,-2,0,0,0,0,0,0,0,0}, { 0,0,0,0,0,0,0,0,0,0,0,1} }");
00499         string  q_String(" { {0, 1}, { 0,-2,0,0,0,0,0,0,0,0,0,1} }");
00500         typename  FrommerType::TPolynomXY                       
00501         minus_polynom_P         = createFromString<typename  FrommerType::TPolynomXY>(minusP_String, ring);
00502 
00503         typename  FrommerType::TPolynomXY        
00504         polynom_Q               = createFromString<typename  FrommerType::TPolynomXY>(q_String, ring);
00505 
00506         frommer.setPolynoms( &minus_polynom_P , & polynom_Q );
00507         frommer.doit(false);
00508         
00509         
00510         typename FrommerType::TPolynomXY::CoefficientType referenceResult = ring.addInv (       ring.multiply(ring.Convert(2), 
00511                                                                                                 ring.multInv(ring.Convert(9).getX() ) ) 
00512                                                                                         );
00513         cerr << "referenceResult " << referenceResult << endl;
00514         typename FrommerType::TPolynomXY::CoefficientType  focalValue = frommer.getFocalValue(1);
00515         for (int currFocalValue=1; currFocalValue<=frommer.getComputedFocalValuesNum(); currFocalValue++)
00516         {
00517                 focalValue = frommer.getFocalValue(currFocalValue);
00518                 cerr << "focalValue " << focalValue << endl;
00519         }
00520           focalValue = frommer.getFocalValue(4);
00521 
00522         assert(focalValue == referenceResult);
00523 }
00524 //1. Strudelgroesse = -2/9
00525 
00526 template <class FrommerType>
00527 void frommerTest(int characteristic, int epsPrecision)
00528 {
00529         int maxFocalValuesToCompute = (characteristic-3)/2;
00530         typename FrommerType::RingType ring(characteristic, epsPrecision);
00531 
00532         FrommerType frommer(maxFocalValuesToCompute, &ring);
00533 
00534         
00535         
00536         frommer_TestNo1 (frommer);
00537         cerr << "frommer_TestNo1 test passed! " << endl;
00538         
00539         
00540         frommer_TestNo2 (frommer);
00541         cerr << "frommer_TestNo2 test passed! " << endl;
00542         
00543         frommer_TestNo3 (frommer);
00544         cerr << "frommer_TestNo3 test passed! " << endl;
00545         
00546         frommer_TestNo4_a       (frommer);
00547         cerr << "frommer_TestNo4_a test passed! " << endl;
00548         
00549         frommer_TestNo4_b       (frommer);
00550         cerr << "frommer_TestNo4_b test passed! " << endl;
00551 
00552         #ifndef OPTIMIZED_FIELD
00553                 frommer_TestNo5 (frommer);
00554                 cerr << "frommer_TestNo5 test passed! " << endl;
00555                 frommer_TestNo6 (frommer);
00556                 cerr << "frommer_TestNo6 test passed! " << endl;
00557 
00558         #endif
00559         
00560 
00561         cerr << "Frommer tests passed! " << endl;
00562 }
00563 
00564 template <class FrommerType>
00565 void frommerTestInternal(int epsPrecision)
00566 {
00567 
00568         #ifdef FIELDCHAR
00569                 frommerTest<FrommerType>(FIELDCHAR,epsPrecision);
00570         #else
00571         std::cerr << "FIELDCHAR not defined" << std::endl;
00572         frommerTest<FrommerType>(11,epsPrecision);
00573         frommerTest<FrommerType>(23,epsPrecision);
00574         frommerTest<FrommerType>(29,epsPrecision);
00575         #endif
00576 }
00577 
00578 
00579 void frommerTest ()
00580 {
00581         int epsPrecision=0;
00582         frommerTestInternal<D_Frommer>(epsPrecision=1);
00583         frommerTestInternal<D_Frommer0>(epsPrecision=0);
00584         frommerTestInternal<D_Frommer2>(epsPrecision=1);
00585         frommerTestInternal<D_Eps_Frommer>(epsPrecision=0);
00586 
00587 }
00588 
00589 
00590 
00591 // Originaltests: - ja, und was war denn die Charakteristik??? egal?
00592 
00593         //erstes Beispiel
00594         /*
00595         polynomXY p(2);
00596         p.SetKoeff(1,0,1);
00597         p.SetKoeff(2,0,4);
00598         p.SetKoeff(0,2, 1);
00599         polynomXY q(2);
00600         q.SetKoeff(0,1,1);
00601         q.SetKoeff(2,0,1);
00602         q.SetKoeff(0,2, k.negativ(2));
00603         //1.Strudelgröße = -4
00604         */
00605 
00606         //zweites Beispiel
00607         /*
00608         polynomXY p(2);
00609         p.SetKoeff(1,0, 1);
00610         polynomXY q(2);
00611         q.SetKoeff(0,1,1);
00612         p.SetKoeff(2,0, 1);
00613         p.SetKoeff(1,1, 2);
00614         p.SetKoeff(0,2, k.negativ(1));
00615         q.SetKoeff(1,1, k.negativ(2));
00616         q.SetKoeff(0,2, 1);
00617         //2.Strudelgröße = -14/15
00618         */
00619 
00620         //drittes Beispiel
00621         /*
00622         polynomXY p(3);
00623         p.SetKoeff(1,0, 1);
00624         p.SetKoeff(2,0, 4);
00625         p.SetKoeff(0,2, 1);
00626         p.SetKoeff(3,0, 2);
00627         p.SetKoeff(0,3, k.negativ(2));
00628         polynomXY q(3);
00629         q.SetKoeff(0,1, 1);
00630         q.SetKoeff(2,0, 1);
00631         q.SetKoeff(0,2, k.negativ(2));
00632         q.SetKoeff(3,0, 2);
00633         q.SetKoeff(0,3, k.negativ(2));
00634         */
00635         //alle Strudelgrößen = 0
00636         
00637 
00638         //viertes Beispiel
00639         /*
00640         polynomXY p(3);
00641         p.SetKoeff(1,0, 1);
00642         p.SetKoeff(3,0, 2);
00643         p.SetKoeff(0,3, 1);
00644         polynomXY q(3);
00645         q.SetKoeff(0,1, 1);
00646         q.SetKoeff(2,1, 1);
00647         q.SetKoeff(0,3, 1);
00648         */
00649         //1. Strudelgröße = -1
00650 
00651         //viertes Beispiel
00652         /*
00653         polynomXY p(3);
00654         p.SetKoeff(1,0, 1);
00655         p.SetKoeff(2,1, 4);
00656         p.SetKoeff(0,3, 1);
00657         polynomXY q(3);
00658         q.SetKoeff(0,1, 1);
00659         q.SetKoeff(3,0, 2);
00660         q.SetKoeff(1,2, 1);
00661         */
00662         //1. Strudelgröße = 44/35
00663 
00664         //fünftes Beispiel
00665         /*
00666         polynomXY p(5);
00667         p.SetKoeff(1,0, 1);
00668         p.SetKoeff(2,1, 4);
00669         p.SetKoeff(0,3, 1);
00670         p.SetKoeff(3,2, 2);
00671         polynomXY q(5);
00672         q.SetKoeff(0,1, 1);
00673         q.SetKoeff(3,0, 2);
00674         q.SetKoeff(1,2, 1);
00675         q.SetKoeff(4,1, 2);
00676         */
00677         //alle Strudelgrößen = 0
00678 
00679         //sechstes Beispiel
00680         /*
00681         polynomXY p(11);
00682         p.SetKoeff(1,0, 1);
00683         p.SetKoeff(7,0, 1);
00684         p.SetKoeff(8,1, 2);
00685         p.SetKoeff(0,11, k.negativ(1));
00686         polynomXY q(11);
00687         q.SetKoeff(0,1, 1);
00688         q.SetKoeff(10,1, k.negativ(2));
00689         q.SetKoeff(0,11, 1);
00690         //1. Strudelgröße = -2/9
00691         */
00692 
00693 };
00694 
00695 #endif
00696 
Generated on Tue Nov 23 13:10:51 2010 for centerfocus by  doxygen 1.6.3