34 #include "DGtal/base/Common.h"
35 #include "DGtal/kernel/CPointPredicate.h"
36 #include "DGtal/arithmetic/IntegerComputer.h"
37 #include "DGtal/arithmetic/SternBrocot.h"
38 #include "DGtal/arithmetic/LightSternBrocot.h"
39 #include "DGtal/arithmetic/LighterSternBrocot.h"
40 #include "DGtal/arithmetic/Pattern.h"
44 using namespace DGtal;
50 template <
typename Fraction1,
typename Fraction2>
52 testPattern( Fraction1 f1 )
56 Fraction2 f2( f1.p(), f1.q() );
60 std::cerr << std::endl;
62 f1.reduced(1).selfDisplay( std::cerr );
63 std::cerr << std::endl;
65 f1.reduced(2).selfDisplay( std::cerr );
66 std::cerr << std::endl;
82 std::cerr <<
"p1=" << p1.rE() << std::endl;
83 std::cerr <<
"p2=" << p2.rE() << std::endl;
84 std::cerr <<
"p1=" << p1.rEs(
"(|)" ) << std::endl;
85 std::cerr <<
"p2=" << p2.rEs(
"(|)" ) << std::endl;
86 return p1.rE() == p2.rE();
89 template <
typename Fraction1,
typename Fraction2>
93 unsigned int nbtests = 100;
95 unsigned int nbok = 0;
97 f1 = Fraction1( 5, 8 );
98 ++nb, nbok += testPattern<Fraction1,Fraction2>( f1 ) ? 1 : 0;
99 std::cerr <<
"(" << nbok <<
"/" << nb <<
") f1=";
100 f1.selfDisplay( std::cerr );
102 f1 = Fraction1( 31, 24 );
103 ++nb, nbok += testPattern<Fraction1,Fraction2>( f1 ) ? 1 : 0;
104 std::cerr <<
"(" << nbok <<
"/" << nb <<
") f1=";
105 f1.selfDisplay( std::cerr );
107 f1 = Fraction1( 5, 13 );
108 ++nb, nbok += testPattern<Fraction1,Fraction2>( f1 ) ? 1 : 0;
109 std::cerr <<
"(" << nbok <<
"/" << nb <<
") f1=";
110 f1.selfDisplay( std::cerr );
113 for (
unsigned int i = 0; i < nbtests; ++i )
115 unsigned int p = random() % 1000;
116 unsigned int q = random() % 1000;
117 unsigned int g = ic.
gcd( p, q );
119 std::cerr <<
"*- p / q = " << p <<
"/" << q << std::endl;
120 f1 = Fraction1( p, q );
121 ++nb, nbok += testPattern<Fraction1,Fraction2>( f1 ) ? 1 : 0;
122 std::cerr <<
"(" << nbok <<
"/" << nb <<
") f1=";
123 f1.selfDisplay( std::cerr );
132 int main(
int ,
char** )
137 typedef SB::Fraction Fraction;
138 typedef LSB::Fraction LFraction;
139 typedef LLSB::Fraction LLFraction;
141 bool res = testPatterns<Fraction, LFraction>()
142 && testPatterns<Fraction, LLFraction>()
143 && testPatterns<LLFraction, LFraction>();
144 trace.
emphase() << ( res ?
"Passed." :
"Error." ) << endl;