X-Git-Url: https://git.llucax.com/z.facultad/75.29/dale.git/blobdiff_plain/5e6b85a00fe62bb0a04c91d4312c34af74ebafd8..b1f022eafb05c6e27918b71369642f4426f9df30:/tests/number.cpp diff --git a/tests/number.cpp b/tests/number.cpp index c0d7bd1..0bbcb37 100644 --- a/tests/number.cpp +++ b/tests/number.cpp @@ -3,43 +3,152 @@ int main() { -#if 0 - unsigned buf[5] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0 }; +#if 1 + unsigned bufA[] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff }; + unsigned bufB[] = { 0xffffffff, 0x00000000, 0x00000000, 0x00000000 }; //unsigned buf[3] = { 0xffffffff, 0x1, 0 }; - number<> nu(buf, 4); //number< unsigned > nu2(nu); - number<> nu2 = 2u; - std::cout << "nu = " << nu << "\n\n"; - std::cout << "nu2 = " << nu2 << "\n\n"; - std::cout << "nu + nu2 = " << nu + nu2 << "\n\n"; - std::cout << "nu * nu2 = " << nu * nu2 << "\n\n"; + //number<> B = 0xffffffffU; + number<> A(bufA, 4, positive); + number<> B(bufB, 4, positive); + + + std::cout << "nu = " << A << "\n\n"; + std::cout << "nu2 = " << B << "\n\n"; + std::cout << "nu + nu2 = " << A + B << "\n\n"; + + number<> N = naif(A, B); + std::cout << "nu `naif` nu2 = " << N << "\n\n"; + + number<> K = karatsuba(A, B); + std::cout << "nu `ko` nu2 = " << K << "\n\n"; + + assert(N == K); + + number<> N2 = naif(A, A); + std::cout << "nu `naif` nu = " << N2 << "\n\n"; + + number<> K2 = karatsuba(A, A); + std::cout << "nu `ko` nu = " << K2 << "\n\n"; + + assert(N2 == K2); + + //std::cout << "nu^nu2 = " << pot_dyc_n(A, B) << "\n\n"; + + number<> X = 0xff; + number<> Y = 0xff; + std::cout << "r = " << naif(X, Y) << "\n\n"; + +#if 1 + number <>rd = pot_dyc_n(X, Y); + std::cout << "x `pot_dyc_n` y = " << rd << "\n\n"; + number <>rc = pot_dyc_k(X, Y); + std::cout << "x `pot_dyc_k` y = " << rc << "\n\n"; + if (!(rc == rd)) { + printf("Las pot NO DAN\n"); + } else { + printf("Las pot dan iguales\n"); + } #endif -#if 0 + unsigned buf1[] = { 0xffffffff, 0xffffffff }; + number<> T(buf1, 2, positive); + normalize_length(T, T); + std::cout << "test: " << naif(T, T) << "\n\n"; +#endif + +#if 1 number< unsigned > nu = 0xffffffff; - std::cout << "nu = " << nu << "\n\n"; + std::cout << "nu = " << nu ; nu << 5; - std::cout << "nu = " << nu << "\n\n"; -#endif - - number<> n1 = 0xffff00f0; - number<> n2 = 0xffff00f0; - - n1 += 1; - - n1 <<= 4; - n2 <<= 4; - - if (n1 < n2) - std::cout << "n1 es menor que n2\n"; - else if (n2 < n1) - std::cout << "n1 es mayor que n2\n"; - else - std::cout << "n1 es igual que n2\n"; - - number<> n3 = n1 - n2; + std::cout << "nu = " << nu ; - return 0; + number<> n1 = 0xffff00f1; + number<> n2 = 0xffff00f0; + + normalize_length(n1, n2); + + /* + n2 += 1; + n1 <<= 4; + n2 <<= 4; + */ +/* for (int k = 0; k < 100; k++) + { + n1 += (unsigned) rand() * k; + n2 += (unsigned) rand() * k; + } +*/ + +// n1 <<= 1; +// n2 <<= 1; + + if (n1 < n2) + std::cout << "n1 es menor que n2\n"; + else if (n2 < n1) + std::cout << "n1 es mayor que n2\n"; + else + std::cout << "n1 es igual que n2\n"; + std::cout << "\n"; + + +// for (int j=0; j<10; j++) +// n1.borrow(0); + + std::cout << "n1: " << n1 ; + std::cout << "\n"; + std::cout << "n2: " << n2 ; + std::cout << "\n"; + + n1 -= n2; + + std::cout << "n1-n2: " << n1 << "\n"; +#endif + +#if 0 + uint32_t buf[] = { 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }; + number<> nu(buf, 8, negative); + number<> nu2 = 0x2; + std::cout << "nu = " << nu ; + std::cout << "\n"; + std::cout << "nu2 = " << nu2 ; + std::cout << "\n"; + std::cout << "nu * nu2 = " << naif(nu, nu2) ; + std::cout << "\n"; + std::cout << "nu + nu2 = " << nu + nu2 ; + std::cout << "\n"; + std::cout << "nu - nu2 = " << nu - nu2 ; + +#endif + + number<> h = 0x10000000; + h<<=1; + h += 0xfffffffc; + h<<=1; + h += 0xffffffff; + h<<=1; + h += 0x00000002; + number<> d = 0; + number<> m = 0xfffffffe; + m<<=1; + m += 0xffffffff; + m<<=1; + m += 0x00000001; + + std::cout << "h: " << h ; + std::cout << "\n"; + std::cout << "d: " << d ; + std::cout << "\n"; + std::cout << "m: " << m ; + std::cout << "\n"; + + number<> a = h - d - m; + + std::cout << "h-d-m: " << a << "\n"; + + + return 0; } +