1515
1616namespace epxut {
1717
18+ TEST (z_tests, create) {
19+ {
20+ auto num = epx::create<sz::container_type>(0 );
21+ EXPECT_TRUE (epx::is_zero (num));
22+ }
23+ {
24+ auto num = epx::create<sz::container_type>(0x030201 );
25+ sz expected{.digits = {1 , 2 , 3 }};
26+ EXPECT_EQ (expected, num);
27+ }
28+ {
29+ auto num = epx::create<mz::container_type>(-2 );
30+ mz expected{.digits = {2 }, .sgn = epx::sign::negative};
31+ EXPECT_EQ (expected, num);
32+ }
33+ }
34+
1835TEST (z_tests, normalize) {
1936 {
2037 sz zero;
2138 EXPECT_TRUE (epx::is_zero (zero));
22- EXPECT_TRUE (epx::is_positive (zero));
39+ EXPECT_FALSE (epx::is_negative (zero));
2340 epx::normalize (zero);
2441 EXPECT_TRUE (epx::is_zero (zero));
25- EXPECT_TRUE (epx::is_positive (zero));
42+ EXPECT_FALSE (epx::is_negative (zero));
2643 }
2744 {
2845 mz zero;
2946 EXPECT_TRUE (epx::is_zero (zero));
30- EXPECT_TRUE (epx::is_positive (zero));
47+ EXPECT_FALSE (epx::is_negative (zero));
3148
3249 zero.digits = {0 , 0 };
3350 EXPECT_FALSE (epx::is_zero (zero));
34- EXPECT_TRUE (epx::is_positive (zero));
51+ EXPECT_FALSE (epx::is_negative (zero));
3552 epx::normalize (zero);
3653 epx::add_n (zero, zero);
3754 EXPECT_TRUE (epx::is_zero (zero));
38- EXPECT_TRUE (epx::is_positive (zero));
55+ EXPECT_FALSE (epx::is_negative (zero));
3956 }
4057 {
4158 lz zero;
4259 EXPECT_TRUE (epx::is_zero (zero));
43- EXPECT_TRUE (epx::is_positive (zero));
60+ EXPECT_FALSE (epx::is_negative (zero));
4461
4562 zero.digits = {0 , 0 };
4663 zero.sgn = epx::sign::negative;
4764 EXPECT_FALSE (epx::is_zero (zero));
48- EXPECT_FALSE (epx::is_positive (zero));
65+ EXPECT_TRUE (epx::is_negative (zero));
4966 epx::normalize (zero);
5067 EXPECT_TRUE (epx::is_zero (zero));
51- EXPECT_TRUE (epx::is_positive (zero));
68+ EXPECT_FALSE (epx::is_negative (zero));
5269 }
5370 {
5471 sz num = {.digits = {0 , 1 , 2 , 0 , 0 }, .sgn = epx::sign::negative};
5572 EXPECT_FALSE (epx::is_zero (num));
56- EXPECT_FALSE (epx::is_positive (num));
73+ EXPECT_TRUE (epx::is_negative (num));
5774 epx::normalize (num);
5875 auto expected_digits = sz::container_type{0 , 1 , 2 };
5976 EXPECT_EQ (expected_digits, num.digits );
60- EXPECT_FALSE (epx::is_positive (num));
77+ EXPECT_TRUE (epx::is_negative (num));
6178 }
6279}
6380
@@ -123,7 +140,7 @@ TEST(z_tests, mul) {
123140 EXPECT_TRUE (epx::is_zero (epx::mul (zero, zero)));
124141 EXPECT_TRUE (epx::is_zero (epx::mul (zero, one)));
125142 EXPECT_TRUE (epx::is_zero (epx::mul (one, zero)));
126- EXPECT_TRUE (epx::is_positive (epx::mul (minus_one, zero)));
143+ EXPECT_FALSE (epx::is_negative (epx::mul (minus_one, zero)));
127144
128145 EXPECT_EQ (one, epx::mul (one, one));
129146 EXPECT_EQ (one, epx::mul (minus_one, minus_one));
@@ -313,7 +330,7 @@ TEST(z_tests, mul_4exp) {
313330 epx::mul_4exp (num, -32 ); // Large negative exponent
314331 sz expected{};
315332 EXPECT_EQ (expected, num);
316- EXPECT_TRUE (epx::is_positive (num)); // Should reset sign to positive
333+ EXPECT_FALSE (epx::is_negative (num)); // Should reset sign to positive
317334 }
318335 {
319336 sz num{};
@@ -324,4 +341,60 @@ TEST(z_tests, mul_4exp) {
324341 }
325342}
326343
344+ TEST (z_tests, pow) {
345+ {
346+ sz zero;
347+ sz one = {.digits = {1 }};
348+ auto pwr = epx::pow (zero, 0 ); // 0^0 = 1
349+ EXPECT_EQ (one, pwr);
350+ }
351+ {
352+ sz zero;
353+ auto pwr = epx::pow (zero, 1 ); // 0^1 = 0
354+ EXPECT_EQ (zero, pwr);
355+ }
356+ {
357+ auto num = create_sz (2 );
358+ auto expected = create_sz (64 );
359+ auto pwr = epx::pow (num, 6 ); // 2^6 = 64
360+ EXPECT_EQ (expected, pwr);
361+ }
362+ {
363+ sz one = {.digits = {1 }};
364+ sz minus_one{.digits = {1 }, .sgn = epx::sign::negative};
365+ EXPECT_EQ (minus_one, epx::pow (minus_one, 9 )); // (-1)^9 = -1
366+ EXPECT_EQ (one, epx::pow (minus_one, 10 )); // (-1)^10 = 1
367+ }
368+ }
369+
370+ TEST (z_tests, root) {
371+ {
372+ sz zero;
373+ EXPECT_TRUE (epx::is_zero (epx::root (zero, 1 )));
374+ EXPECT_TRUE (epx::is_zero (epx::root (zero, 2 )));
375+ EXPECT_TRUE (epx::is_zero (epx::root (zero, 7 )));
376+ }
377+ {
378+ sz one = {.digits = {1 }};
379+ EXPECT_EQ (one, epx::root (sz{}, 0 ));
380+ EXPECT_EQ (one, epx::root (one, 0 ));
381+ EXPECT_EQ (one, epx::root (create_sz (2 ), 0 ));
382+ EXPECT_EQ (one, epx::root (create_sz (9 ), 0 ));
383+ }
384+ {
385+ EXPECT_EQ (create_sz (2 ), epx::root (create_sz (4 ), 2 ));
386+ EXPECT_EQ (create_sz (3 ), epx::root (create_sz (9 ), 2 ));
387+ EXPECT_EQ (create_sz (19 ), epx::root (create_sz (361 ), 2 ));
388+ EXPECT_EQ (create_sz (1000 ), epx::root (create_sz (1000000 ), 2 ));
389+ }
390+ {
391+ EXPECT_EQ (create_sz (5 ), epx::root (create_sz (125 ), 3 ));
392+ EXPECT_EQ (create_sz (37398 ), epx::root (create_sz (1956111062177043216 ), 4 ));
393+ }
394+ {
395+ EXPECT_EQ (create_sz (111 ), epx::root (create_sz (12345 ), 2 ));
396+ EXPECT_EQ (create_sz (23 ), epx::root (create_sz (12345 ), 3 ));
397+ }
398+ }
399+
327400} // namespace epxut
0 commit comments