]> git.llucax.com Git - z.facultad/75.29/dale.git/blob - 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
1 #include <iostream>
2 #include "../src/number.h"
3
4 int main()
5 {
6 #if 1
7         unsigned bufA[] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff };
8         unsigned bufB[] = { 0xffffffff, 0x00000000, 0x00000000, 0x00000000 };
9         //unsigned buf[3] = { 0xffffffff, 0x1, 0 };
10         //number< unsigned > nu2(nu);
11         //number<> B = 0xffffffffU;
12         number<> A(bufA, 4, positive);
13         number<> B(bufB, 4, positive);
14
15
16         std::cout << "nu = " << A << "\n\n";
17         std::cout << "nu2 = "  << B << "\n\n";
18         std::cout << "nu + nu2 = "  << A + B << "\n\n";
19
20         number<> N = naif(A, B);
21         std::cout << "nu `naif` nu2 = "  << N << "\n\n";
22
23         number<> K = karatsuba(A, B);
24         std::cout << "nu `ko` nu2 = "  << K << "\n\n";
25
26         assert(N == K);
27
28         number<> N2 = naif(A, A);
29         std::cout << "nu `naif` nu = " << N2 << "\n\n";
30
31         number<> K2 = karatsuba(A, A);
32         std::cout << "nu `ko` nu = " << K2 << "\n\n";
33
34         assert(N2 == K2);
35
36         //std::cout << "nu^nu2 = "  << pot_dyc_n(A, B) << "\n\n";
37
38         number<> X = 0xff;
39         number<> Y = 0xff;
40         std::cout << "r = " << naif(X, Y) << "\n\n";
41
42 #if 1
43         number <>rd = pot_dyc_n(X, Y);
44         std::cout << "x `pot_dyc_n` y = " << rd << "\n\n";
45         number <>rc = pot_dyc_k(X, Y);
46         std::cout << "x `pot_dyc_k` y = " << rc << "\n\n";
47         if (!(rc == rd)) {
48                 printf("Las pot NO DAN\n");
49         } else {
50                 printf("Las pot dan iguales\n");
51         }
52 #endif
53
54         unsigned buf1[] = { 0xffffffff, 0xffffffff };
55         number<> T(buf1, 2, positive);
56         normalize_length(T, T);
57         std::cout << "test: " << naif(T, T) << "\n\n";
58 #endif
59
60 #if 1
61         number< unsigned > nu = 0xffffffff;
62         std::cout << "nu = " << nu ;
63
64         nu << 5;
65         std::cout << "nu = " << nu ;
66
67         number<> n1 = 0xffff00f1;
68         number<> n2 = 0xffff00f0;
69
70         normalize_length(n1, n2);
71
72         /*
73         n2 += 1;
74         n1 <<= 4;
75         n2 <<= 4;
76         */
77 /*      for (int k = 0; k < 100; k++)
78         {
79                 n1 += (unsigned) rand() * k;
80                 n2 += (unsigned) rand() * k;
81         }
82 */
83         
84 //      n1 <<= 1;
85 //      n2 <<= 1;
86
87         if (n1 < n2)
88                 std::cout << "n1 es menor que n2\n";
89         else if (n2 < n1)
90                 std::cout << "n1 es mayor que n2\n";
91         else
92                 std::cout << "n1 es igual que n2\n";
93
94         std::cout << "\n";
95
96
97 //      for (int j=0; j<10; j++)
98 //              n1.borrow(0);
99
100         std::cout << "n1: " << n1 ;
101         std::cout << "\n";
102         std::cout << "n2: " << n2 ;
103         std::cout << "\n";
104
105         n1 -= n2;
106
107         std::cout << "n1-n2: " << n1 << "\n";
108 #endif
109
110 #if 0
111         uint32_t buf[] = { 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 };
112         number<> nu(buf, 8, negative);
113         number<> nu2 = 0x2;
114         std::cout << "nu = " << nu ;
115         std::cout << "\n";
116         std::cout << "nu2 = " << nu2 ;
117         std::cout << "\n";
118         std::cout << "nu * nu2 = "  << naif(nu, nu2) ;
119         std::cout << "\n";
120         std::cout << "nu + nu2 = "  << nu + nu2 ;
121         std::cout << "\n";
122         std::cout << "nu - nu2 = "  << nu - nu2 ;
123
124 #endif
125
126         number<> h = 0x10000000;
127         h<<=1;
128         h += 0xfffffffc;
129         h<<=1;
130         h += 0xffffffff;
131         h<<=1;
132         h += 0x00000002;
133         number<> d = 0;
134         number<> m = 0xfffffffe;
135         m<<=1;
136         m += 0xffffffff;
137         m<<=1;
138         m += 0x00000001;
139
140         std::cout << "h: " << h ;
141         std::cout << "\n";
142         std::cout << "d: " << d ;
143         std::cout << "\n";
144         std::cout << "m: " << m ;
145         std::cout << "\n";
146
147         number<> a = h - d - m;
148
149         std::cout << "h-d-m: " << a << "\n";
150
151
152         return 0;
153 }
154