#include <iostream>
#define GIVARO_DEBUG 1
#include <givaro/givrandom.h>
#include <givaro/givtimer.h>
#include <givaro/givgfq.h>
#include <givaro/givpoly1.h>
#include <givaro/givtruncdomain.h>
#include <givaro/givhighorder.h>
using namespace Givaro;
bool success = false, successF=false;
try {
if (! success) {
std::cerr << "---------- BEG ERROR ----------" <<std::endl;
HO101.
getpoldom().
write(std::cerr <<
"TTy:=", TTy) <<
';' << std::endl;
HO101.
write(std::cerr <<
"TTy17:=", TTy17) <<
';' << std::endl;
HO101.
write(std::cerr <<
"TTy17b:=", TTy17b) <<
';' << std::endl;
std::cerr << "---------- END ERROR ----------" <<std::endl;
}
if (! successF) {
std::cerr << "---------- BEG ERROR ----------" <<std::endl;
HO101.
getpoldom().
write(std::cerr <<
"TTy:=", TTy) <<
';' << std::endl;
HO101.
write(std::cerr <<
"TTy17:=", TTy17) <<
';' << std::endl;
HO101.
write(std::cerr <<
"TTy17c:=", TTy17c) <<
';' << std::endl;
std::cerr << "---------- END ERROR ----------" <<std::endl;
} else {
}
std::cerr << e << std::endl;
}
return success && successF;
}
int main(
int argc,
char ** argv) {
long numb = (argc>1?atoi(argv[1]):200);
std::cerr << "numb: " << numb << std::endl;
long tttn = (argc>2?atoi(argv[2]):100);
std::cerr << "tttn: " << tttn << std::endl;
long seed = (argc>3?atoi(argv[3]):
BaseTimer::seed());
std::cerr << "seed: " << seed << std::endl;
long deg1 = (long) generator() % 6;
long deg2 = (long) generator() % 6;
long deg3 = (long) generator() % 155;
DP101.random(generator, P,
Degree(deg1) );
DP101.random(generator, Q,
Degree(deg2) );
DP101.random(generator, R,
Degree(deg3) );
Degree dP; DP101.degree(dP,P);
Degree dQ; DP101.degree(dQ,Q);
Degree dR; DP101.degree(dR,R);
DP101.write(std::cout << "P:=", P) << ';' << std::endl;
HO101.taylor(Tay, F, 128);
DP101.write(std::cout << "Tay:=", Tay) << ';' << std::endl;
size_t e = 0 ;
HO101.GammaId(G0, S, dS, (long)e, P, dP);
std::cout << "e:=" << e << ';' << std::endl;
HO101.write(std::cout << "G0:=", G0) << ';' << std::endl;
DP101.write(std::cout << "S:=", S) << ';' << std::endl;
std::vector<HighOrders::Truncated> Gam, T;
std::vector<Degree> D;
HO101.highorder(Gam, T, D, nTay, dT,
Degree(970),
Degree(1000), P, dP);
HO101.write(std::cout << "Gam:=", Gam.back()) << ';' << std::endl;
HO101.Inverse(I, 113, 127, TP, dP, nTay, dT, Gam, T, D);
HO101.write(std::cout << "I]_155^175:=", I) << ';' << std::endl;
bool success=true;
for(long i=0; i<numb; ++i) {
long Deg1 = (long)generator() % ((66*tttn)/100);
long Deg2 = (long)generator() % ((65*tttn)/100);
long v1 = (long)generator() % ((19195*tttn)/100);
long v2 = v1 + ((long)generator() % (long)((45*tttn)/100));
DP101.random(generator, P,
Degree(Deg1) );
DP101.random(generator, Q,
Degree(Deg2) );
}
std::cerr <<
"Taylor: " <<
Ttaylor << std::endl;
std::cerr <<
"HighOrder: " <<
Thighorder << std::endl;
std::cerr <<
"Fiduccia: " <<
Tfiduccia << std::endl;
if (! success) {
std::cerr << "Error: " << seed << std::endl;
} else {
std::cerr <<
"Success:" <<
TFDcount << std::endl;
}
std::cerr <<
"Success F:" <<
FiDcount << std::endl;
return 0;
}