DGtal 1.4.0
Loading...
Searching...
No Matches
testPattern.cpp
Go to the documentation of this file.
1
31#include <cstdlib>
32#include <iostream>
33#include <map>
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"
41
42#include <boost/version.hpp>
43#include <boost/random/mersenne_twister.hpp>
44#include <boost/random/uniform_smallint.hpp>
45#include <boost/random/variate_generator.hpp>
47
48using namespace std;
49using namespace DGtal;
50
52// Functions for testing class LightSternBrocot.
54
55template <typename Fraction1, typename Fraction2>
56bool
57testPattern( Fraction1 f1 )
58{
59 typedef Pattern<Fraction1> Pattern1;
60 typedef Pattern<Fraction2> Pattern2;
61 Fraction2 f2( f1.p(), f1.q() );
62
63 std::cerr << " f1 =";
64 f1.selfDisplay( std::cerr );
65 std::cerr << std::endl;
66 std::cerr << "r(1)=";
67 f1.reduced(1).selfDisplay( std::cerr );
68 std::cerr << std::endl;
69 std::cerr << "r(2)=";
70 f1.reduced(2).selfDisplay( std::cerr );
71 std::cerr << std::endl;
72
73 Pattern1 p1( f1 );
74 Pattern2 p2( f2 );
75 std::cerr << "p1=" << p1.rE() << std::endl;
76 std::cerr << "p2=" << p2.rE() << std::endl;
77 std::cerr << "p1=" << p1.rEs( "(|)" ) << std::endl;
78 std::cerr << "p2=" << p2.rEs( "(|)" ) << std::endl;
79 return p1.rE() == p2.rE();
80}
81
82template <typename Fraction1, typename Fraction2>
83bool
85{
86 unsigned int nbtests = 100;
87 unsigned int nb = 0;
88 unsigned int nbok = 0;
89 Fraction1 f1;
90 f1 = Fraction1( 5, 8 );
91 ++nb;
92 nbok += testPattern<Fraction1,Fraction2>( f1 ) ? 1 : 0;
93 std::cerr << "(" << nbok << "/" << nb << ") f1=";
94 f1.selfDisplay( std::cerr );
95 std::cerr << endl;
96 f1 = Fraction1( 31, 24 );
97 ++nb;
98 nbok += testPattern<Fraction1,Fraction2>( f1 ) ? 1 : 0;
99 std::cerr << "(" << nbok << "/" << nb << ") f1=";
100 f1.selfDisplay( std::cerr );
101 std::cerr << endl;
102 f1 = Fraction1( 5, 13 );
103 ++nb;
104 nbok += testPattern<Fraction1,Fraction2>( f1 ) ? 1 : 0;
105 std::cerr << "(" << nbok << "/" << nb << ") f1=";
106 f1.selfDisplay( std::cerr );
107 std::cerr << endl;
109
110 for ( unsigned int i = 0; i < nbtests; ++i )
111 {
112 unsigned int p = 1 + std::rand() % 999;
113 unsigned int q = 1 + std::rand() % 999;
114 unsigned int g = ic.gcd( p, q );
115 p /= g; q /= g;
116 std::cerr << "*- p / q = " << p << "/" << q << std::endl;
117 f1 = Fraction1( p, q );
118 ++nb;
119 nbok += testPattern<Fraction1,Fraction2>( f1 ) ? 1 : 0;
120 std::cerr << "(" << nbok << "/" << nb << ") f1=";
121 f1.selfDisplay( std::cerr );
122 std::cerr << endl;
123 }
124 return nbok == nb;
125}
126
127
129// Standard services - public :
130int main( int , char** )
131{
135 typedef SB::Fraction Fraction;
136 typedef LSB::Fraction LFraction;
137 typedef LLSB::Fraction LLFraction;
138 trace.beginBlock ( "Testing class Pattern" );
142 trace.emphase() << ( res ? "Passed." : "Error." ) << endl;
143 trace.endBlock();
144
145 return res ? 0 : 1;
146}
147// //
149
Aim: This class gathers several types and methods to make computation with integers.
Integer gcd(IntegerParamType a, IntegerParamType b) const
Aim: The Stern-Brocot tree is the tree of irreducible fractions. This class allows to construct it pr...
Aim: The Stern-Brocot tree is the tree of irreducible fractions. This class allows to construct it pr...
Aim: This class represents a pattern, i.e. the path between two consecutive upper leaning points on a...
Definition Pattern.h:79
Aim: The Stern-Brocot tree is the tree of irreducible fractions. This class allows to construct it pr...
Definition SternBrocot.h:78
void beginBlock(const std::string &keyword="")
std::ostream & emphase()
double endBlock()
DGtal is the top-level namespace which contains all DGtal functions and types.
Trace trace
Definition Common.h:153
STL namespace.
int main()
Definition testBits.cpp:56
bool testPattern()
bool testPatterns()