]> git.llucax.com Git - z.facultad/75.29/dale.git/blobdiff - tests/number.cpp
Generaliza el constructor a partir de un string para que tome cualquier base.
[z.facultad/75.29/dale.git] / tests / number.cpp
index bee99760e0070cc51efbdf8b28568e4435ffd3e9..0bbcb3718d8398c19f5a31e8d373744091ac2cb0 100644 (file)
 
 int main()
 {
-       //unsigned buf[5] = { 0xfffffffe, 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< unsigned > nu = 0xffffffff;
        //number< unsigned > nu2(nu);
-       number< unsigned > nu2 = 1u;
-       std::cout << "nu = " << nu << "\n\n";
-       std::cout << "nu2 = "  << 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
+
+       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 ;
+
+       nu << 5;
+       std::cout << "nu = " << nu ;
+
+       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;
 }