DGtal 1.3.0
Loading...
Searching...
No Matches
Functions
testOrderedAlphabet.cpp File Reference
#include <iostream>
#include <sstream>
#include "DGtal/base/Common.h"
#include "DGtal/base/OrderedAlphabet.h"

Go to the source code of this file.

Functions

bool testFLF (const OrderedAlphabet &alphabet, const string &output, const string &input)
 
bool testDuvalPP (const OrderedAlphabet &alphabet, const string &output, const string &input)
 
bool testDuvalPPMod (const OrderedAlphabet &alphabet, const string &output, const string &input, OrderedAlphabet::index_t s)
 
bool testOrderedAlphabet ()
 
int main (int argc, char **argv)
 

Detailed Description

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Author
Laurent Provot (Laure.nosp@m.nt.P.nosp@m.rovot.nosp@m.@lor.nosp@m.ia.fr ) LORIA (CNRS, UMR 7503), Nancy University, France
Date
2010/07/04

Functions for testing class OrderedAlphabet.

This file is part of the DGtal library.

Definition in file testOrderedAlphabet.cpp.

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 188 of file testOrderedAlphabet.cpp.

189{
190 trace.beginBlock ( "Testing class OrderedAlphabet" );
191 trace.info() << "Args:";
192 for ( int i = 0; i < argc; ++i )
193 trace.info() << " " << argv[ i ];
194 trace.info() << endl;
195
196 bool res = testOrderedAlphabet(); // && ... other tests
197 trace.emphase() << ( res ? "Passed." : "Error." ) << endl;
198 trace.endBlock();
199
200 return res ? 0 : 1;
201}
void beginBlock(const std::string &keyword="")
std::ostream & emphase()
std::ostream & info()
double endBlock()
Trace trace
Definition: Common.h:154
bool testOrderedAlphabet()

References DGtal::Trace::beginBlock(), DGtal::Trace::emphase(), DGtal::Trace::endBlock(), DGtal::Trace::info(), testOrderedAlphabet(), and DGtal::trace.

◆ testDuvalPP()

bool testDuvalPP ( const OrderedAlphabet alphabet,
const string &  output,
const string &  input 
)

Checks if Duval++ works.

Parameters
alphabetan alphabet.
inputthe input word.
outputthe expected output word as "NC" or "C(w1)^l1"
Returns
'true' if the test was ok, 'false' otherwise.

Definition at line 88 of file testOrderedAlphabet.cpp.

91{
94 bool christoffel = alphabet.duvalPP( len, nb, input, 0, (DGtal::OrderedAlphabet::index_t)input.size() );
95 stringstream s1;
96 if ( christoffel )
97 s1 << "C(" << input.substr( 0, len ) << ")^" << nb;
98 else s1 << "NC(" << len << ")";
99
100 trace.beginBlock ( "Test Duval++" );
101 trace.info() << " input = " << input << endl;
102 trace.info() << "expected = " << output << endl;
103 trace.info() << "computed = " << s1.str() << endl;
104 trace.endBlock();
105
106 return s1.str() == output;
107}
bool duvalPP(size_t &len, size_t &nb, const std::string &w, index_t s, index_t e) const

References DGtal::Trace::beginBlock(), DGtal::OrderedAlphabet::duvalPP(), DGtal::Trace::endBlock(), DGtal::Trace::info(), and DGtal::trace.

Referenced by testOrderedAlphabet().

◆ testDuvalPPMod()

bool testDuvalPPMod ( const OrderedAlphabet alphabet,
const string &  output,
const string &  input,
OrderedAlphabet::index_t  s 
)

Checks if Duval++ modulo works.

Parameters
alphabetan alphabet.
inputthe input word.
outputthe expected output word as "NC" or "C(w1)^l1"
sstarting index.
Returns
'true' if the test was ok, 'false' otherwise.

Definition at line 119 of file testOrderedAlphabet.cpp.

123{
126 bool christoffel = alphabet.duvalPPMod( len, nb, input, s, s );
127 stringstream s1;
128 if ( christoffel )
129 {
130 s1 << "C(";
131 for ( unsigned int i = 0; i < len; ++i )
132 {
133 s1 << input[ s ];
134 s = s + 1 % input.size();
135 }
136 s1 << ")^" << nb;
137 }
138 else s1 << "NC(" << len << ")";
139
140 trace.beginBlock ( "Test Duval++ modulo" );
141 trace.info() << " input = " << input << endl;
142 trace.info() << "expected = " << output << endl;
143 trace.info() << "computed = " << s1.str() << endl;
144 trace.endBlock();
145
146 return s1.str() == output;
147}
bool duvalPPMod(size_t &len, size_t &nb, const std::string &w, index_t s, index_t e) const

References DGtal::Trace::beginBlock(), DGtal::OrderedAlphabet::duvalPPMod(), DGtal::Trace::endBlock(), DGtal::Trace::info(), and DGtal::trace.

Referenced by testOrderedAlphabet().

◆ testFLF()

bool testFLF ( const OrderedAlphabet alphabet,
const string &  output,
const string &  input 
)

Checks if the Lyndon factorization works.

Parameters
alphabetan alphabet.
inputthe input word.
outputthe expected output word as (w1)^l1...(wn)^ln.
Returns
'true' if the test was ok, 'false' otherwise.

Definition at line 51 of file testOrderedAlphabet.cpp.

54{
55 string w1 = input;
56 string a1 = output;
57 stringstream s1;
58 unsigned int len;
59 unsigned int nb;
60 unsigned int s = 0;
61 unsigned int e = (unsigned int)w1.size();
62 do
63 {
64 alphabet.firstLyndonFactor( len, nb, w1, s, e );
65 s1 << "(" << w1.substr( s, len ) << ")^" << nb;
66 s += len*nb;
67 }
68 while ( s < e );
69
70 trace.beginBlock ( "Test Lyndon factorization" );
71 trace.info() << " input = " << input << endl;
72 trace.info() << "expected = " << output << endl;
73 trace.info() << "computed = " << s1.str() << endl;
75
76 return s1.str() == a1;
77}
void firstLyndonFactor(size_t &len, size_t &nb, const std::string &w, index_t s, index_t e) const

References DGtal::Trace::beginBlock(), DGtal::Trace::endBlock(), DGtal::OrderedAlphabet::firstLyndonFactor(), DGtal::Trace::info(), and DGtal::trace.

Referenced by testOrderedAlphabet().

◆ testOrderedAlphabet()

bool testOrderedAlphabet ( )

Test the class OrderedAlphabet.

Definition at line 154 of file testOrderedAlphabet.cpp.

155{
156 unsigned int nb_ok = 0;
157 unsigned int nb_ko = 0;
158 OrderedAlphabet A( '0', 4 );
159 string w1 = "01101010100101001010001";
160 string a1= "(011)^1(01)^3(00101)^2(0001)^1";
161 if ( testFLF( A, a1, w1 ) ) nb_ok++;
162 else nb_ko++;
163 w1 = "01232112232232103220123210120";
164 a1 = "(0123211223223210322)^1(012321)^1(012)^1(0)^1";
165 if ( testFLF( A, a1, w1 ) ) nb_ok++;
166 else nb_ko++;
167 w1 = "1112111211211121121112111211211121121111";
168 a1 = "C(111211121121112112)^2";
169 if ( testDuvalPP( A, a1, w1 ) ) nb_ok++;
170 else nb_ko++;
171 w1 = "1112111211211121121121111211211121121111";
172 a1 = "NC(20)";
173 if ( testDuvalPP( A, a1, w1 ) ) nb_ok++;
174 else nb_ko++;
175 w1 = "2111211211121121111111211121121112112111";
176 a1 = "C(111211121121112112)^2";
177 if ( testDuvalPPMod( A, a1, w1, 19 ) ) nb_ok++;
178 else nb_ko++;
179
180 trace.info() << "Tests passed: " << nb_ok << "/"
181 << ( nb_ok + nb_ko ) << endl;
182
183 return !nb_ko;
184}
Aim: Describes an alphabet over an interval of (ascii) letters, where the lexicographic order can be ...
bool testFLF(const OrderedAlphabet &alphabet, const string &output, const string &input)
bool testDuvalPP(const OrderedAlphabet &alphabet, const string &output, const string &input)
bool testDuvalPPMod(const OrderedAlphabet &alphabet, const string &output, const string &input, OrderedAlphabet::index_t s)

References DGtal::Trace::info(), testDuvalPP(), testDuvalPPMod(), testFLF(), and DGtal::trace.

Referenced by main().