home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perl560.zip / t / op / 64bitint.t next >
Text File  |  2000-03-22  |  5KB  |  243 lines

  1. #./perl
  2.  
  3. BEGIN {
  4.     eval { my $q = pack "q", 0 };
  5.     if ($@) {
  6.         print "1..0\n# no 64-bit types\n";
  7.         exit(0);
  8.     }
  9.     chdir 't' if -d 't';
  10.     unshift @INC, '../lib';
  11. }
  12.  
  13. # This could use a lot of more tests.
  14.  
  15. # so that using > 0xfffffff constants and
  16. # 32+ bit integers don't cause noise
  17. no warnings qw(overflow portable);
  18.  
  19. print "1..48\n";
  20.  
  21. my $q = 12345678901;
  22. my $r = 23456789012;
  23. my $f = 0xffffffff;
  24. my $x;
  25. my $y;
  26.  
  27. $x = unpack "q", pack "q", $q;
  28. print "not " unless $x == $q && $x > $f;
  29. print "ok 1\n";
  30.  
  31.  
  32. $x = sprintf("%lld", 12345678901);
  33. print "not " unless $x eq $q && $x > $f;
  34. print "ok 2\n";
  35.  
  36.  
  37. $x = sprintf("%lld", $q);
  38. print "not " unless $x == $q && $x eq $q && $x > $f;
  39. print "ok 3\n";
  40.  
  41. $x = sprintf("%Ld", $q);
  42. print "not " unless $x == $q && $x eq $q && $x > $f;
  43. print "ok 4\n";
  44.  
  45. $x = sprintf("%qd", $q);
  46. print "not " unless $x == $q && $x eq $q && $x > $f;
  47. print "ok 5\n";
  48.  
  49.  
  50. $x = sprintf("%llx", $q);
  51. print "not " unless hex($x) == 0x2dfdc1c35 && hex($x) > $f;
  52. print "ok 6\n";
  53.  
  54. $x = sprintf("%Lx", $q);
  55. print "not " unless hex($x) == 0x2dfdc1c35 && hex($x) > $f;
  56. print "ok 7\n";
  57.  
  58. $x = sprintf("%qx", $q);
  59. print "not " unless hex($x) == 0x2dfdc1c35 && hex($x) > $f;
  60. print "ok 8\n";
  61.  
  62.  
  63. $x = sprintf("%llo", $q);
  64. print "not " unless oct("0$x") == 0133767016065 && oct($x) > $f;
  65. print "ok 9\n";
  66.  
  67. $x = sprintf("%Lo", $q);
  68. print "not " unless oct("0$x") == 0133767016065 && oct($x) > $f;
  69. print "ok 10\n";
  70.  
  71. $x = sprintf("%qo", $q);
  72. print "not " unless oct("0$x") == 0133767016065 && oct($x) > $f;
  73. print "ok 11\n";
  74.  
  75.  
  76. $x = sprintf("%llb", $q);
  77. print "not " unless oct("0b$x") == 0b1011011111110111000001110000110101 &&
  78.                     oct("0b$x") > $f;
  79. print "ok 12\n";
  80.  
  81. $x = sprintf("%Lb", $q);
  82. print "not " unless oct("0b$x") == 0b1011011111110111000001110000110101 &&
  83.                                    oct("0b$x") > $f;
  84. print "ok 13\n";
  85.  
  86. $x = sprintf("%qb", $q);
  87. print "not " unless oct("0b$x") == 0b1011011111110111000001110000110101 &&
  88.                     oct("0b$x") > $f;
  89. print "ok 14\n";
  90.  
  91.  
  92. $x = sprintf("%llu", $q);
  93. print "not " unless $x eq $q && $x > $f;
  94. print "ok 15\n";
  95.  
  96. $x = sprintf("%Lu", $q);
  97. print "not " unless $x == $q && $x eq $q && $x > $f;
  98. print "ok 16\n";
  99.  
  100. $x = sprintf("%qu", $q);
  101. print "not " unless $x == $q && $x eq $q && $x > $f;
  102. print "ok 17\n";
  103.  
  104.  
  105. $x = sprintf("%D", $q);
  106. print "not " unless $x == $q && $x eq $q && $x > $f;
  107. print "ok 18\n";
  108.  
  109. $x = sprintf("%U", $q);
  110. print "not " unless $x == $q && $x eq $q && $x > $f;
  111. print "ok 19\n";
  112.  
  113. $x = sprintf("%O", $q);
  114. print "not " unless oct($x) == $q && oct($x) > $f;
  115. print "ok 20\n";
  116.  
  117.  
  118. $x = $q + $r;
  119. print "not " unless $x == 35802467913 && $x > $f;
  120. print "ok 21\n";
  121.  
  122. $x = $q - $r;
  123. print "not " unless $x == -11111110111 && -$x > $f;
  124. print "ok 22\n";
  125.  
  126. $x = $q * 1234567;
  127. print "not " unless $x == 15241567763770867 && $x > $f;
  128. print "ok 23\n";
  129.  
  130. $x /= 1234567;
  131. print "not " unless $x == $q && $x > $f;
  132. print "ok 24\n";
  133.  
  134. $x = 98765432109 % 12345678901;
  135. print "not " unless $x == 901;
  136. print "ok 25\n";
  137.  
  138. # The following 12 tests adapted from op/inc.
  139.  
  140. $a = 9223372036854775807;
  141. $c = $a++;
  142. print "not " unless $a == 9223372036854775808;
  143. print "ok 26\n";
  144.  
  145. $a = 9223372036854775807;
  146. $c = ++$a;
  147. print "not " unless $a == 9223372036854775808 && $c == $a;
  148. print "ok 27\n";
  149.  
  150. $a = 9223372036854775807;
  151. $c = $a + 1;
  152. print "not " unless $a == 9223372036854775807 && $c == 9223372036854775808;
  153. print "ok 28\n";
  154.  
  155. $a = -9223372036854775808;
  156. $c = $a--;
  157. print "not " unless $a == -9223372036854775809 && $c == -9223372036854775808;
  158. print "ok 29\n";
  159.  
  160. $a = -9223372036854775808;
  161. $c = --$a;
  162. print "not " unless $a == -9223372036854775809 && $c == $a;
  163. print "ok 30\n";
  164.  
  165. $a = -9223372036854775808;
  166. $c = $a - 1;
  167. print "not " unless $a == -9223372036854775808 && $c == -9223372036854775809;
  168. print "ok 31\n";
  169.  
  170. $a = 9223372036854775808;
  171. $a = -$a;
  172. $c = $a--;
  173. print "not " unless $a == -9223372036854775809 && $c == -9223372036854775808;
  174. print "ok 32\n";
  175.  
  176. $a = 9223372036854775808;
  177. $a = -$a;
  178. $c = --$a;
  179. print "not " unless $a == -9223372036854775809 && $c == $a;
  180. print "ok 33\n";
  181.  
  182. $a = 9223372036854775808;
  183. $a = -$a;
  184. $c = $a - 1;
  185. print "not " unless $a == -9223372036854775808 && $c == -9223372036854775809;
  186. print "ok 34\n";
  187.  
  188. $a = 9223372036854775808;
  189. $b = -$a;
  190. $c = $b--;
  191. print "not " unless $b == -$a-1 && $c == -$a;
  192. print "ok 35\n";
  193.  
  194. $a = 9223372036854775808;
  195. $b = -$a;
  196. $c = --$b;
  197. print "not " unless $b == -$a-1 && $c == $b;
  198. print "ok 36\n";
  199.  
  200. $a = 9223372036854775808;
  201. $b = -$a;
  202. $b = $b - 1;
  203. print "not " unless $b == -(++$a);
  204. print "ok 37\n";
  205.  
  206.  
  207. $x = '';
  208. print "not " unless (vec($x, 1, 64) = $q) == $q;
  209. print "ok 38\n";
  210.  
  211. print "not " unless vec($x, 1, 64) == $q && vec($x, 1, 64) > $f;
  212. print "ok 39\n";
  213.  
  214. print "not " unless vec($x, 0, 64) == 0 && vec($x, 2, 64) == 0;
  215. print "ok 40\n";
  216.  
  217.  
  218. print "not " unless ~0 == 0xffffffffffffffff;
  219. print "ok 41\n";
  220.  
  221. print "not " unless (0xffffffff<<32) == 0xffffffff00000000;
  222. print "ok 42\n";
  223.  
  224. print "not " unless ((0xffffffff)<<32)>>32 == 0xffffffff;
  225. print "ok 43\n";
  226.  
  227. print "not " unless 1<<63 == 0x8000000000000000;
  228. print "ok 44\n";
  229.  
  230. print "not " unless (sprintf "%#Vx", 1<<63) eq '0x8000000000000000';
  231. print "ok 45\n";
  232.  
  233. print "not " unless (0x8000000000000000 | 1) == 0x8000000000000001;
  234. print "ok 46\n";
  235.  
  236. print "not " unless (0xf000000000000000 & 0x8000000000000000) == 0x8000000000000000;
  237. print "ok 47\n";
  238.  
  239. print "not " unless (0xf000000000000000 ^ 0xfffffffffffffff0) == 0x0ffffffffffffff0;
  240. print "ok 48\n";
  241.  
  242. # eof
  243.