integer_operations.t 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. #!perl -T
  2. use 5.006;
  3. use strict;
  4. use warnings;
  5. use Test::More;
  6. plan tests => 41;
  7. use Math::AnyNum;
  8. {
  9. my $z = Math::AnyNum->new_z('43');
  10. is($z->popcount, 4);
  11. is($z, 43);
  12. $z = $z->neg;
  13. is($z, -43);
  14. is($z->popcount, 4);
  15. is($z, -43);
  16. my $c = Math::AnyNum->new_c('3', '4');
  17. ok(!defined($c->popcount)); # complex cannot be converted to an integer
  18. is($c, '3+4i'); # make sure the object is intact
  19. }
  20. {
  21. my $z = Math::AnyNum->new_z('12');
  22. my $t1 = $z->factorial;
  23. is($t1, '479001600');
  24. is($z, '12'); # make sure factorial didn't change $z
  25. $z = $t1;
  26. $z = $z->isqrt;
  27. is($z, 21886);
  28. #<<<
  29. $z = $z->ipow(30);
  30. is($z, '16032152917429066747418982495813383711705136304907234176407498567267316572349793360954753660521310614994729887678856029514210738176');
  31. #>>>
  32. #~ $z->ilog(21886);
  33. #~ is($z, '30');
  34. $z = $z->log(21886);
  35. is($z, '30');
  36. $z = $z->mul(10);
  37. is($z, '300');
  38. $z = $z->iroot(3);
  39. is($z, '6');
  40. my $t2 = $z->binomial(3);
  41. is($t2, '20');
  42. is($z, '6'); # make sure binomial didn't change $z
  43. $z = $t2;
  44. $z = $z->imod(12);
  45. is($z, '8');
  46. }
  47. {
  48. my $n = Math::AnyNum->new('-13');
  49. my $y = Math::AnyNum->new('9');
  50. my $f = Math::AnyNum->new('5.7');
  51. {
  52. # Special
  53. my $z = $n->isqrt;
  54. is($z, 'NaN');
  55. }
  56. {
  57. my $z = $n->iroot(3);
  58. is($z, '-2');
  59. }
  60. {
  61. my $z = $n->iroot(-3);
  62. is($z, 'NaN');
  63. }
  64. {
  65. my $z = $n->ipow('3.95'); # gets truncated to '3'
  66. is($z, '-2197');
  67. }
  68. {
  69. my $z = $n->ipow('-3.95'); # gets truncated to '-3'
  70. is($z, '-1');
  71. }
  72. {
  73. my $z = $n->ipow('4.95'); # gets truncated to '4'
  74. is($z, '28561');
  75. }
  76. {
  77. my $z = $n->ipow('-4.95'); # gets truncated to '-4'
  78. is($z, '0');
  79. }
  80. {
  81. my $z = $n->imod('-0.01'); # gets truncated to '0'
  82. is($z, 'NaN');
  83. }
  84. {
  85. my $z = $n->imod(Math::AnyNum->new('-0.91')); # gets truncated to '0'
  86. is($z, 'NaN');
  87. }
  88. {
  89. my $z = $n->imod(Math::AnyNum->new('9.2')); # gets truncated to '9'
  90. is($z, '5');
  91. }
  92. {
  93. my $z = $n->imod(Math::AnyNum->new('-9.9')); # gets truncated to '9'
  94. is($z, '-4');
  95. }
  96. {
  97. my $z = $n->imod(Math::AnyNum->new('-20/2'));
  98. is($z, '-3');
  99. }
  100. {
  101. my $z = $n->imod('13');
  102. is($z, '0');
  103. }
  104. {
  105. my $z = $n->imod('-13');
  106. is($z, '0');
  107. }
  108. {
  109. my $z = $n->imod('11');
  110. is($z, '9');
  111. }
  112. {
  113. my $z = $n->imod($y);
  114. is($z, '5');
  115. }
  116. {
  117. my $z = $n->mod('11');
  118. is($z, '9');
  119. }
  120. {
  121. my $z = $n->imod('-11');
  122. is($z, '-2');
  123. }
  124. {
  125. my $z = $n->idiv('2');
  126. is($z, '-7');
  127. }
  128. {
  129. my $z = $n->idiv('-2');
  130. is($z, '6');
  131. }
  132. {
  133. my $z = $n->idiv($y);
  134. is($z, '-2');
  135. }
  136. {
  137. my $z = $n->idiv(-$y);
  138. is($z, '1');
  139. }
  140. {
  141. my $z = $n->idiv($f);
  142. is($z, '-3');
  143. }
  144. {
  145. my $z = $n->abs->idiv($f);
  146. is($z, '2');
  147. }
  148. }