DGtal
2.2.0
Toggle main menu visibility
Loading...
Searching...
No Matches
testStandardDSLQ0-smartDSS-benchmark.cpp
Go to the documentation of this file.
1
16
29
31
#include <cstdlib>
32
#include <iostream>
33
#include "DGtal/base/Common.h"
34
#include "DGtal/kernel/CPointPredicate.h"
35
#include "DGtal/arithmetic/IntegerComputer.h"
36
#include "DGtal/arithmetic/SternBrocot.h"
37
#include "DGtal/arithmetic/Pattern.h"
38
#include "DGtal/arithmetic/StandardDSLQ0.h"
40
41
using namespace
std
;
42
using namespace
DGtal
;
43
45
// Functions for testing class SternBrocot.
47
48
template
<
typename
DSL>
49
bool
checkSubStandardDSLQ0
(
const
DSL & D,
50
const
typename
DSL::Point &
A
,
51
const
typename
DSL::Point &
B
)
52
{
53
54
55
DSL S = D.smartDSS(
A
,
B
);
56
// std::cout << D.a() << " " << D.b() << " " << D.mu() << " "
57
// << S.a() << " " << S.b() << " " << S.mu() << " "
58
// << A[0] << " " << A[1] << " " << B[0] << " " << B[1]
59
// << std::endl;
60
return
true
;
61
}
62
63
template
<
typename
Fraction>
64
bool
testSubStandardDSLQ0
(
unsigned
int
nbtries,
65
typename
Fraction::Integer moda,
66
typename
Fraction::Integer modb,
67
typename
Fraction::Integer modx )
68
{
69
typedef
StandardDSLQ0<Fraction>
DSL;
70
typedef
typename
Fraction::Integer
Integer
;
71
typedef
typename
DSL::Point
Point
;
72
IntegerComputer<Integer>
ic;
73
74
//std::cout << "# a b mu a1 b1 mu1 Ax Ay Bx By" << std::endl;
75
76
clock_t timeBegin, timeEnd;
77
timeBegin = clock();
78
79
for
(
unsigned
int
i = 0; i < nbtries; ++i )
80
{
81
Integer
b( rand() % modb + 1 );
82
Integer
a( rand() % b + 1 );
83
if
( ic.
gcd
( a, b ) == 1 )
84
{
85
for
(
Integer
mu = 0; mu < 5; ++mu )
86
{
87
DSL D( a, b, rand() % (moda+modb) );
88
for
(
Integer
x = 0; x < 10; ++x )
89
{
90
Integer
x1 = rand() % modx;
91
Integer
x2 = x1 + 1 + ( rand() % modx );
92
Point
A
= D.lowestY( x1 );
93
Point
B
= D.lowestY( x2 );
94
checkSubStandardDSLQ0<DSL>
( D,
A
,
B
);
95
}
96
}
97
}
98
}
99
100
timeEnd = clock();
101
long
double
CPUTime;
102
CPUTime = ((double)timeEnd-(double)timeBegin)/((
double
)CLOCKS_PER_SEC);
103
104
//std::cout << "SmartDSS: CPU Time elapsed = " << CPUTime << " - Time/test = = " << (long double) CPUTime/(nbtries*5*10) << std::endl;
105
106
std::cout << modx <<
" "
<< (
long
double) CPUTime/(nbtries*5*10) << std::endl;
107
108
109
return
true
;
110
}
111
113
// Standard services - public :
114
115
int
main
(
int
argc,
char
** argv)
116
{
117
typedef
SternBrocot<DGtal::int64_t,DGtal::int32_t>
SB;
118
typedef
SB::Fraction Fraction;
119
typedef
Fraction::Integer
Integer
;
120
unsigned
int
nbtries = ( argc > 1 ) ? atoi( argv[ 1 ] ) : 10000;
121
// Integer moda = ( argc > 2 ) ? atoll( argv[ 2 ] ) : 100000000000;
122
// Integer modb = ( argc > 3 ) ? atoll( argv[ 3 ] ) : 100000000000;
123
// Integer modx = ( argc > 4 ) ? atoll( argv[ 4 ] ) : 1000;
124
// testSubStandardDSLQ0<Fraction>( nbtries, moda, modb, modx );
125
126
127
128
Integer
modb = 1000000000000;
129
Integer
moda = modb;
130
131
for
(
Integer
modx = 10; modx < modb/2;modx*=2)
132
{
133
testSubStandardDSLQ0<Fraction>
( nbtries, moda, modb, modx );
134
}
135
136
137
138
139
return
0;
140
}
141
// //
B
Definition
testPartialTemplateSpecialization.cpp:63
DGtal::IntegerComputer
Aim: This class gathers several types and methods to make computation with integers.
Definition
IntegerComputer.h:83
DGtal::IntegerComputer::gcd
Integer gcd(IntegerParamType a, IntegerParamType b) const
DGtal::Point
DGtal::StandardDSLQ0
Aim: Represents a digital straight line with slope in the first quadrant (Q0: x >= 0,...
Definition
StandardDSLQ0.h:80
DGtal::SternBrocot
Aim: The Stern-Brocot tree is the tree of irreducible fractions. This class allows to construct it pr...
Definition
SternBrocot.h:78
Integer
Point::Coordinate Integer
Definition
examplePlaneProbingParallelepipedEstimator.cpp:44
DGtal
DGtal is the top-level namespace which contains all DGtal functions and types.
Definition
ClosedIntegerHalfPlane.h:49
std
STL namespace.
A
Definition
testCountedConstPtrOrConstPtr.cpp:43
main
int main(int, char **)
Definition
testIntegerComputer.cpp:331
testSubStandardDSLQ0
bool testSubStandardDSLQ0()
Definition
testLighterSternBrocot.cpp:657
checkSubStandardDSLQ0
bool checkSubStandardDSLQ0(const DSL &D, const typename DSL::Point &A, const typename DSL::Point &B)
Definition
testLighterSternBrocot.cpp:620
tests
benchmarks
arithmetic
testStandardDSLQ0-smartDSS-benchmark.cpp
Generated on
for DGtal by
1.18.0