#include <iostream>
#include <recint/rint.h>
#include <recint/ruint.h>
#include <givaro/modular.h>
#include <givaro/montgomery.h>
#include <givaro/gfq.h>
#include <givaro/gfqext.h>
template<class Field>
void TestField(
const Field& F) {
std::cerr << "Within " ;
std::cerr << " : " << std::flush;
typename Field::Element a, b, c, d;
F.init(b, -29.3);
F.init(c);
F.init(d);
F.write( std::cout, a) << " + " << std::flush;
F.write( std::cout, b) << " = " << std::flush;
F.write( std::cerr, c) << std::endl;
F.write( std::cerr << "Within " ) << " : " << std::flush;
F.write( F.write( F.write( F.write(
std::cout, c) << " + ", a) << " * ", b) << " = ", d) << std::endl;
{
typename Field::Element e;
F.init(e); F.
assign(e,d);
F.write( std::cerr << "Within " ) << " : " << std::flush;
F.write( F.write( F.write( F.write(
std::cout, d) << " - ", a) << " * ", b) << " = ", e) << std::endl;
}
{
typename Field::Element e;
F.init(e); F.assign(e,d);
F.write( std::cerr << "Within " ) << " : " << std::flush;
F.write( F.write( F.write( F.write(
std::cout, d) << " - ", a) << " * ", b) << " = ", e) << std::endl;
}
{
typename Field::Element e;
F.init(e); F.assign(e,d);
F.write( std::cerr << "Within " ) << " : " << std::flush;
F.write( F.write( F.write( F.write(
std::cout, a) << " * ", b) << " - ", d) << " = ", e) << std::endl;
}
{
typename Field::Element e;
F.init(e); F.assign(e,d);
F.maxpyin(e, a, b);
F.write( std::cerr << "Within " ) << " : " << std::flush;
F.write( F.write( F.write( F.write(
std::cout, d) << " - ", a) << " * ", b) << " = ", e) << std::endl;
}
F.write( F.write( std::cout, a) << " += ", b) << " is " ;
F.write( std::cout, F.
addin(a, b) ) <<
" ; ";
F.write( F.write( std::cout, a) << " -= ", b) << " is ";
F.write( std::cout, F.
subin(a, b) ) <<
" ; ";
F.write( F.write( std::cout, a) << " *= ", b) << " is " ;
F.write( std::cout, F.
mulin(a, b) ) <<
" ; ";
F.write( F.write( std::cout, a) << " /= ", b) << " is ";
F.write( std::cout, F.
divin(a, b) ) << std::endl;
F.init(a,22996);
F.write( F.write( std::cout << "1/", a) << " is ", b) << std::endl;
F.mul(c,b,a);
F.write( std::cout << "1 is ", c) << std::endl;
F.init(a,22996);
F.init(b,22996);
F.write( std::cout << "1/", a) << " is ";
F.write( std::cout, a) << std::endl;
F.mulin(a,b);
F.write( std::cout << "1 is ", a) << std::endl;
F.init(a,37403);
F.inv(b,a);
F.write( F.write( std::cout << "1/", a) << " is ", b) << std::endl;
F.mul(c,b,a);
F.write( std::cout << "1 is ", c) << std::endl;
F.init(a,37403);
F.init(b,37403);
F.write( std::cout << "1/", a) << " is ";
F.invin(a);
F.write( std::cout, a) << std::endl;
F.mulin(a,b);
F.write( std::cout << "1 is ", a) << std::endl;
}
extern "C" {
# include <sys/time.h>
# include <sys/resource.h>
}
int main(int argc, char ** argv) {
Modular<int16_t> C13(13); TestField( C13 );
Modular<int32_t> Z13(13); TestField( Z13 );
Modular<uint32_t> U13(13); TestField( U13 );
#ifdef __USE_Givaro_SIXTYFOUR__
Modular<int64_t> LL13(13U); TestField( LL13 );
#endif
Modular<Log16> L13(13); TestField( L13 );
Montgomery<int32_t> M13(13); TestField( M13 );
Montgomery<int32_t> M3(39989); TestField( M3 );
GFqDom<int> GF13( 13 ); TestField( GF13 );
Modular<Integer> IntZ13(13); TestField( IntZ13 );
Modular<RecInt::rint<7>> rIntZ13(13); TestField( rIntZ13 );
Modular<RecInt::ruint<7>> ruIntZ13(13); TestField( ruIntZ13 );
GFqDom<int> GF625( 5, 4 ); TestField( GF625 );
std::vector< GFqDom<int64_t>::Residu_t > Irred(9);
Irred[0] = 1; Irred[1] = 1; Irred[2] = 0; Irred[3] = 1;
Irred[4] = 1; Irred[5] = 0; Irred[6] = 0; Irred[7] = 0;
Irred[8] = 1;
GFqDom<int64_t> F256(2,8, Irred); TestField( F256 );
GFqExt<int32_t> GF81( 3, 4 ); TestField( GF81 );
struct rusage tmp1 ;
getrusage (RUSAGE_SELF, &tmp1) ;
double tim = (double) tmp1.ru_utime.tv_sec + ((double) tmp1.ru_utime.tv_usec)/ ( 1000000.0 ) ;
;
getrusage (RUSAGE_SELF, &tmp1) ;
tim = (double) tmp1.ru_utime.tv_sec + ((double) tmp1.ru_utime.tv_usec)/ (1000000.0) - tim;
std::cerr << "Initialization took " << tim << " cpu seconds and : " << std::endl;
std::cerr
<< tmp1.ru_maxrss << " maximum resident set size"<< std::endl
<< tmp1.ru_ixrss << " integral shared memory size"<< std::endl
<< tmp1.ru_idrss << " integral unshared data size"<< std::endl
<< tmp1.ru_isrss << " integral unshared stack size"<< std::endl
<< tmp1.ru_minflt << " page reclaims"<< std::endl
<< tmp1.ru_majflt << " page faults"<< std::endl
<< tmp1.ru_nswap << " swaps"<< std::endl
<< tmp1.ru_inblock << " block input operations"<< std::endl
<< tmp1.ru_oublock << " block output operations"<< std::endl;
return 0;
}
Namespace in which the whole Givaro library resides.
Definition: all_field.C:23