cleanup: Big pile of whitespace fixes, all at once.
[u/mdw/catacomb] / tests / mpx
index a9490cd..e30e91a 100644 (file)
--- a/tests/mpx
+++ b/tests/mpx
@@ -1,6 +1,6 @@
 # Test vectors for low-level MP functions
 #
-# $Id: mpx,v 1.3 1999/12/10 23:26:40 mdw Exp $
+# $Id: mpx,v 1.12 2004/04/01 12:50:41 mdw Exp $
 
 # --- Load-store tests ---
 #
@@ -20,15 +20,42 @@ load-store {
   522f8b1de257972a25ec49c9ff56340e2684e847ef2fa4d5714d7c8d454e90f6;
 }
 
+# --- Two's complement tests ---
+
+2cb {
+  "" "";
+  00 00;
+  000000 00000000000000000000;
+  01 ff;
+  0123456789abcdef fedcba9876543211;
+  0123456789abcdef fffffffedcba9876543211;
+  0100000000 ffffff00000000;
+  00000000c1a4bc4b ffffffff3e5b43b5;
+  ffffffff3e5b43b5 00000000c1a4bc4b;
+}
+
+2cl {
+  "" "";
+  00 00;
+  000000 00000000000000000000;
+  01 ff;
+  efcdab8967452301 1132547698badcfe;
+  efcdab8967452301 1132547698badcfeffffffff;
+  0000000001 00000000ffffffff;
+  4bbca4c100000000 b5435b3effffffff;
+  b5435b3effffffff 4bbca4c100000000;
+}
+
 # --- Shift tests ---
 
 lsl {
-
   # --- Simple sanity checks ---
 
   01 2 04;
   01 4 10;
 
+  7 -1 0;
+
   # --- Copy shifts ---
 
   01 0 01;
@@ -107,12 +134,99 @@ lsl {
   0e0dd2bb4d1e654846356309a2d97fee00000000;
 }
 
-lsr {
+lslc {
+  # --- Simple sanity checks ---
+
+  01 2 07;
+  01 4 1f;
+
+  7 -1 0;
+
+  # --- Copy shifts ---
+
+  01 0 01;
+  0123456789abcdef0123456789abcdef 0 0123456789abcdef0123456789abcdef;
+
+  # --- Single bit shifts ---
+
+  01 1 03;
+  ff000000 1 01fe000001;
+
+  # --- Word-size shifts (assumes 32-bit words) ---
+
+  0123456789abcdef0123456789abcdef 32
+  0123456789abcdef0123456789abcdefffffffff;
+
+  # --- Random tests ---
+
+  13bbec3a734e0b8b5155600b0826b913 90
+  4eefb0e9cd382e2d4555802c209ae44fffffffffffffffffffffff;
+
+  d6ca6a99fe49b256f80e9643e2bd4f3e 80
+  d6ca6a99fe49b256f80e9643e2bd4f3effffffffffffffffffff;
+
+  c94784b40d54de614084915915531ddc 59
+  064a3c25a06aa6f30a04248ac8aa98eee7ffffffffffffff;
+
+  a63c314a39cc37f950b3d530c95ead00 84
+  0a63c314a39cc37f950b3d530c95ead00fffffffffffffffffffff;
+
+  842d03a339f5004cfd311e2bb23216ac 62
+  210b40e8ce7d40133f4c478aec8c85ab3fffffffffffffff;
+
+  9a8e659739bf9ee7aa908b7c058c5e7e 123
+  04d4732cb9cdfcf73d54845be02c62f3f7ffffffffffffffffffffffffffffff;
+
+  287f5774f212db87bcd83a1bbb7b1ad5 6
+  0a1fd5dd3c84b6e1ef360e86eedec6b57f;
+
+  ec1739174d9d4438d3093cf378605a5c 63
+  760b9c8ba6cea21c69849e79bc302d2e7fffffffffffffff;
+
+  3dfa8ad6a60a783639d05aa5fbfd993d 46
+  0f7ea2b5a9829e0d8e7416a97eff664f7fffffffffff;
 
+  e4e93a80b6d25b34c23aca3a0d06d76c 63
+  72749d405b692d9a611d651d06836bb67fffffffffffffff;
+
+  5a4cf5becb4b64a1a31637c91b6415fd 102
+  16933d6fb2d2d92868c58df246d9057f7fffffffffffffffffffffffff;
+
+  d92f60928b67416c1e20bd9e09026115 69
+  1b25ec12516ce82d83c417b3c1204c22bfffffffffffffffff;
+
+  eae78f56200d7734f7eb68479fe09d51 18
+  03ab9e3d588035dcd3dfada11e7f827547ffff;
+
+  4c9c215ead951513d969d66614016f6e 28
+  04c9c215ead951513d969d66614016f6efffffff;
+
+  5cb1e4d625eac0393644fe6a7e3ff788 33
+  b963c9ac4bd580726c89fcd4fc7fef11ffffffff;
+
+  68b23795968766c77b1897c88a5d6ba8 78
+  1a2c8de565a1d9b1dec625f222975aea3fffffffffffffffffff;
+
+  3d96cd168c74f9015afb691d629f3f6d 72
+  3d96cd168c74f9015afb691d629f3f6dffffffffffffffffff;
+
+  38fa8f63dc426399e0f9b5c01231e02c 95
+  1c7d47b1ee2131ccf07cdae00918f0167fffffffffffffffffffffff;
+
+  90176b493061899ec95677ccc58b8cdf 78
+  2405dad24c186267b2559df33162e337ffffffffffffffffffff;
+
+  0706e95da68f32a4231ab184d16cbff7 33
+  0e0dd2bb4d1e654846356309a2d97fefffffffff;
+}
+
+lsr {
   # --- Simple sanity checks ---
 
   04 2 01;
   10 4 01;
+  7 -1 0;
+  7 32 0;
 
   # --- Copy shifts ---
 
@@ -205,15 +319,15 @@ uadd {
 
   00 00 00;
   00 01 01;
-  01 00 01;  
+  01 00 01;
 
   # --- Carry propagation tests ---
 
     ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-                                                          01
+                                                         01
   0100000000000000000000000000000000000000000000000000000000;
 
-                                                          01
+                                                         01
     ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   0100000000000000000000000000000000000000000000000000000000;
 
@@ -410,7 +524,7 @@ umul {
   45 01 45;
 
   # --- Random tests ---
-  
+
   4162c300b3e157e9cd1301d499c20121
   10549901fc6dcb85882440087bd398ff
   042bc7ac8fe08ceefb098f286cdd84fd037906ead144324e361c488a221db7df;
@@ -493,7 +607,7 @@ umul {
 
   # --- Karatsuba regression ---
   #
-  # This bug was caused by kmul (a) choosing the split point too low on 
+  # This bug was caused by kmul (a) choosing the split point too low on
   # odd-sized inputs and (b) not allocating enough workspace.
 
   21a9269d7b8b63cf18faa933b3c868ba1e8cb3f00b57e197709abf96eeb9bf12e8fe22b3
@@ -534,6 +648,11 @@ umul {
   54f04f121d22db842523e9bf75727d5b0e9ef17e6d727918894927fade87ceeb2106684c4af7c49653425e29f7a91abf8adec4de2ca499df2534644397e454ac
   13ca59703f4c087c16a9a7bc7022904a37a469c1d0fd9fa7ffabe8f7d887fe1572c0bf5c75fde6913b565f8106bba9c26c9bbce190a9b8967112d74c0ac3d4ff9d2a385b96833e3c456d5601c74d8d2c9fff35abc60e7cc15d7c680f20757c13a415f1b8fbe3c6c32434aa36c528473dd20ea39f0e5ee22d1cd23040900d3164;
 
+  # --- More Karatsuba bugs ---
+
+  3fef06998b0ddd140e01527426ea409b2b9e640f223dfd652229fd17eb99d44f6be6d4935505df676f48c8fcbfe2d5096345d6509267aa40c54d427f0cce45cd0f8fa7e4a22492d7ed4ffa45e3c0e5e3c25c841943fb2cecd6ee9275ae93c4e15e2d9f8f317c44c541ed52a6338b0fb9f7f7f4dea78cf7ef5201837c00a6d4d2
+  0260acc6378341b2b894dacab3a44b914f19292bb32898b155584a406161bb04ad9c14db20888dfcdab613b368b5c699305c4e9b226d90f9523fbcb6293407bd2bb18bf7bdba8539fb577f19b72124c2d83a2bc31f44366e917ddc705085b79fe9e0df0e98e4f6ae3df63d9b321382c18b95de1dc4d1db93b3092c9c6f8c9764
+  9802d5c5d5a73f9d4e694a8920f951ce4bfe80c13a35cd5332a556136b83495a2e9b4d2ed53aae1218d2e1c41349311f86b1ee1f2ad5cd3c5b264e8e68906ca45bd7d0fc8e8a5a9648f458cecba41fd0848a04f506bb11ddb378f3214085cf865ba5533cfd73b28b1e12784f447b156f59a3b68e6ec68303ddfce59ce33ca386ff3316e6a5e6f9b4201682aa9e59a6d7cb9315a492457640acca19fc7dc3a25a316fea9a0f1d32838b7f911650647f996551263c2d001fa1c720753afca316c7137300ff93f2ddd2846ce14c55d0ead626f681bd11707f9674905396a9bc9a889eae721ab6407586880a95575a968b43bdf50323627aa0fcddfa4e198b0008;
 }
 
 usqr {
@@ -606,6 +725,44 @@ usqr {
 
   c4245e0ce04fe1151ca17eb8aeb6e3e3
   9647b52e4da6dc80171bd5495ab519835e871bf915ee7e59f1fe2ac165a05b49;
+
+  # --- Large tests for Karatsuba ---
+
+  8390d2dfc9770526e8c4820e1cccca0e8e19d2
+  439d89bef1a65f537e59e74590df3ef10b7e78066ac2af7b5c910e1929de102b491b9f92b044;
+
+  26c4cb564d57970bc3dd00c0c1690c7f1a2e9a
+  05df03a59c9e6ab7bfed79ff8f32811303e46f94c2e8d9abcab5bdac1040e7fdaf5a4bc3b4a4;
+
+  599b3cceca39690c06425127a95b84310cddef
+  1f5d4e6a797662648e4b09abeee439415b76cae52e7cf9db1a54b7f99afb9c00b6130cce8521;
+
+  485b65b3d5edb34810402943ccfbe37a137f8f
+  147389d69e9730f86b04a1782fd15611e6f8dc2e99abc812be0cb82efb2a1ad538aa7ac931e1;
+
+  5a243e54da1f87a8fe23c8b0988b3574aa77c1fe620a5d25b8e03295aebe6c6e135a17
+  1fbd80f54068ba081e793c1aad443094416a75e2e708337618e4ff02ca9dd26bad87cdc0f758342df39a56625c956c971b1f7f18f7d3cb6a1880a574bb7b06a6ca4a431e2e11;
+
+  f5c57a7610feec56586de369136ee25aaf5d3861ad80033410c410658332ca856e4cce
+  ebf394bbb0d2d75ba78b75ae018c77f417cc1c67f0aa587d070980386e14f2b59d9a580d8d483b4df7f6a8d4a44ec8786a87d1da031bb5c288c3afc65d931471786c2412f5c4;
+
+  5bc4457e00bcacf257200a96eadf90359cbd9f6a2c2c69b5ea2e4c5d3939f0ce100c06
+  20e51fe210546e478bfb9d2b0418df921974417799951533f317498439caed52a75c4c66db81910b3fc4f4fb3711cc25f2b4ef151a2023b6e52e64e1d5b7dffb0b9b29509024;
+
+  4b51f1e0a9206173d39a0f1f4eea558dbd9d1ca2d41671b2d27b1b77391e76504e14c0
+  16291df497ccc32ee92a9037b78ff10828c2645dfbf91541f3a0d963892d59c5cd966ffe1e1ebb2dfe6f434fae44da11ae2d2357876b711feba596612c102b8905c8a6ae9000;
+
+  10f63541b2bc5a7d241f887d0b3d182dc473a06c4fb275259112b2fecc9455d7b1eb5b2e9b5c3646c35121d05f1ae99f1ad990c7f0e48b002bd5fdd253c68b56
+  011fb3729baf522bcaed9a966645754804b2cc80168de9f93544e17d5b6d6b81c516f68b72580257f15e3f95bc6eec22608c3055de04051598bf4a76975d111a59d6b02a2fc42de65926cee5d5b97b6c7fc85e00dd59bfdac2c95bc80b7657582b2853244e55b507594a83d5bd87b7a83016dbbc104ce596bdaaed6d98de80e4;
+
+  9e40b3c041505a5e266109f752d85ae3abcbdd28bfc70bbb2c7228bc1564ea893cdda0350689610b74babfe45b14da9708f28c22e3999c841fc70075dd0535cb
+  61d3ee3baef64371ce0416d3f5a6e687903413ad06e85ebbffb9ea0ae9e8cc290fe9dc1cec429e0a294b18121ee29755baf4306861e092e5c1f1def03953f559766787a222368b64594b7be2eeea0698d1fc630446714e681210b5a66e0433b6c43038c0ff213cd14fc0a1fb71789d57b097ab44d859f8bc912f2a89a33baef9;
+
+  d35af50f523d29f53bf0126ccddf4f3052ddb44eeaead360b5f36aad902ba105a921880cefb12caf5e1b3719a40596732d265e996e491f82ca2edf08adca131e
+  ae7f10487aecfa7f91217020f96a1cb00d81545deaf9730daa2c7113e84e76c7e54a1b14971d26750816a696d55622ae1dbd56befdc12a656e66e1d10e87c3bc209e0903635784af6d48a4d7ec84634efb91b7efbfff724bb50ace7d4684d2e72eb7eef84ed5cfd14a7602ceded675da541646febcaa285396b23338b8c57784;
+
+  3df659f884c6a31c5b332efc44fbd70fea46b81adb241fc651af038380f8c476a471f06382ebe55eba339d84edb33a03002ac505d93c61a42ba20e36a691c287
+  0eff53f178849510a118db72c5620423c2991365b06e8caa76300f3df554cf8830c9833f6ec1d33c850b1bb380e33a486a9963b63b5228229fd7e9bdd308bc810aa5e74ccc0e65a2af40c9a287c67e69e841495b0221110f35ed6319bda0dcb0b02174b666df4766eea05481f6a80fe4b93a06fe475d58ae3002303904bee331;
 }
 
 udiv {
@@ -717,4 +874,17 @@ udiv {
   620d87bb63872a40fc2092b0ed7d3ec4b648be41
   0155177e99a8a5113226ff8270
   2ea2205327e66d75990cc999fc2380883ee4591a;
+
+  # --- Bugs ---
+
+  1a923b3406cbe81b093ce418f6a73107f504502b2e3d1b200762fcf6062723de405cab0aea00000000000000000000000000000000
+  184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000
+  0117d3db34ad005954459be9abedd0e5deb4ea0000000000000000
+  00;
+
+  ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff
+  7fffffffffffffffe487ed5110b4611a62633145c06e0e68948127044533e63a0105df531d89cd9128a5043cc71a026ef7ca8cd9e69d218d98158536f92f8a1ba7f09ab6b6a8e122f242dabb312f3f637a262174d31d1b107fffffffffffffff
+  02 01;
+
+  26737e 0ffffc 02 067386;
 }