Lots of test vectors for low-level MP stuff.
authormdw <mdw>
Sat, 13 Nov 1999 01:52:59 +0000 (01:52 +0000)
committermdw <mdw>
Sat, 13 Nov 1999 01:52:59 +0000 (01:52 +0000)
tests/mpx [new file with mode: 0644]

diff --git a/tests/mpx b/tests/mpx
new file mode 100644 (file)
index 0000000..0c6cad0
--- /dev/null
+++ b/tests/mpx
@@ -0,0 +1,609 @@
+# Test vectors for low-level MP functions
+#
+# $Id: mpx,v 1.1 1999/11/13 01:52:59 mdw Exp $
+
+# --- Load-store tests ---
+#
+# The test loads each number, as both big- and little-endian, and compares it
+# against the original octet version using a different method.  It then
+# stores the value to another octet array and compares.  This is done for
+# various sizes of MP, to ensure that truncation works correctly.
+
+load-store {
+  "";
+  00;
+  0123;
+  0123456789abcdef0123456789abcdef0123456789ab;
+  00000123456789abcdef01234789abcdef0123456789ab;
+  0123456789abcdef23456789abcdef0123456789ab0000;
+  80f8c5606bff51bac932859a4fb6331c4023b32b65cd95f4edc1d1c919fcc078;
+  522f8b1de257972a25ec49c9ff56340e2684e847ef2fa4d5714d7c8d454e90f6;
+}
+
+# --- Shift tests ---
+
+lsl {
+
+  # --- Simple sanity checks ---
+
+  01 2 04;
+  01 4 10;
+
+  # --- Copy shifts ---
+
+  01 0 01;
+  0123456789abcdef0123456789abcdef 0 0123456789abcdef0123456789abcdef;
+
+  # --- Single bit shifts ---
+
+  01 1 02;
+  ff000000 1 01fe000000;
+
+  # --- Word-size shifts (assumes 32-bit words) ---
+
+  0123456789abcdef0123456789abcdef 32
+  0123456789abcdef0123456789abcdef00000000;
+
+  # --- Random tests ---
+
+  bcc239a4d4abb0e831dd8a0ea6115a04 72
+  bcc239a4d4abb0e831dd8a0ea6115a04000000000000000000;
+
+  2b355f77dd25d38d36f4491e99953632 16
+  2b355f77dd25d38d36f4491e999536320000;
+  
+  ee07dc8438368ea7ec21bf193be9aa61 5
+  1dc0fb908706d1d4fd8437e3277d354c20;
+  
+  509780c8ff8277649e8f2a62b11972f7 72
+  509780c8ff8277649e8f2a62b11972f7000000000000000000;
+  
+  0afa722d181a44a2472ec3a8831d9232 64
+  0afa722d181a44a2472ec3a8831d92320000000000000000;
+  
+  ddaddd8f1f959603695c0afb1a438182 25
+  01bb5bbb1e3f2b2c06d2b815f634870304000000;
+
+  cec1f22febfb47811a321daac9446798 63
+  6760f917f5fda3c08d190ed564a233cc0000000000000000;
+
+  797589c9cf931930f6005eb774e7023d 29
+  0f2eb13939f263261ec00bd6ee9ce047a0000000;
+
+  9aa77a79a9f189b96b2dd657efe3b64f 24
+  9aa77a79a9f189b96b2dd657efe3b64f000000;
+
+  b6c14bf06adf6c54ae0cd644b7cd5665 67
+  05b60a5f8356fb62a57066b225be6ab3280000000000000000;
+
+  f08c1a2da72f8d1cd459a95d1abb37c1 99
+  078460d16d397c68e6a2cd4ae8d5d9be08000000000000000000000000;
+
+  62eb1217d11d32e36388c2a0a793396a 78
+  18bac485f4474cb8d8e230a829e4ce5a80000000000000000000;
+
+  c6f42d4e8961489e9f7da8c23322be61 101
+  18de85a9d12c2913d3efb518466457cc20000000000000000000000000;
+
+  21e4331e965b142bda426a86267c8b33 31
+  10f2198f4b2d8a15ed213543133e459980000000;
+
+  0b0a787510b01537010ef5f9d23fe3c2 54
+  02c29e1d442c054dc043bd7e748ff8f080000000000000;
+
+  4e78f26838f7173f8f56f688cc45eb22 90
+  0139e3c9a0e3dc5cfe3d5bda233117ac880000000000000000000000;
+
+  0788ff83ce364e53c95203b68898563c 82
+  1e23fe0f38d9394f25480eda226158f000000000000000000000;
+
+  5824b46fef8fa064f9b0c4a54ca76314 68
+  05824b46fef8fa064f9b0c4a54ca7631400000000000000000;
+
+  d00663fdb9fb48f0d5a828c590a5e545 115
+  0680331fedcfda4786ad41462c852f2a280000000000000000000000000000;
+
+  5a075e7730281f73721aff78bae971e1 62
+  1681d79dcc0a07dcdc86bfde2eba5c784000000000000000;
+}
+
+lsr {
+
+  # --- Simple sanity checks ---
+
+  04 2 01;
+  10 4 01;
+
+  # --- Copy shifts ---
+
+  01 0 01;
+  0123456789abcdef0123456789abcdef 0 0123456789abcdef0123456789abcdef;
+
+  # --- Single bit shifts ---
+
+  02 1 01;
+  01fe000000 1 ff000000;
+
+  # --- Word-size shifts (assumes 32-bit words) ---
+
+  0123456789abcdef0123456789abcdef 32
+  0123456789abcdef01234567;
+
+  # --- Random tests ---
+
+  5e16f1a9af75c78c1b59fd8fc04ddd9c 33
+  2f0b78d4d7bae3c60dacfec7;
+
+  a0bce1b785e7c8e67c4402bdff0ce280 61
+  0505e70dbc2f3e4733;
+
+  a5973431b4be31362e95ab483ed9b3ba 21
+  052cb9a18da5f189b174ad5a41f6;
+
+  823ab9448d831601c35e46eac564b0bf 86
+  0208eae51236;
+
+  da5f73cfba0031e51fb4b379af1cf245 89
+  6d2fb9e7dd;
+
+  17e0aec0bad38775e81fce8ae128b17b 48
+  17e0aec0bad38775e81f;
+
+  39b8f703b08c453f726b41119198d44f 110
+  e6e3;
+
+  e3f998f9fc256ffaac02e56d7b8ea93c 78
+  038fe663e7f095;
+
+  617cb59206909241eaccca7c94740412 89
+  30be5ac903;
+
+  76ecfa69b18b41373011f2ef45dc3466 31
+  edd9f4d36316826e6023e5de;
+
+  7ccb864e1f0f8ed89718664670f40275 44
+  07ccb864e1f0f8ed897186;
+
+  50f626568657734cdf0f967dcf49fbe4 55
+  a1ec4cad0caee699be;
+
+  688c4006c4e3de849b39f507668e1972 35
+  0d118800d89c7bd093673ea0;
+
+  634b9be8fe592427f0908d876276ad9e 36
+  0634b9be8fe592427f0908d8;
+
+  e8a61ffa8f3a38f58e456ba733d9c04c 71
+  01d14c3ff51e7471;
+
+  ec193ba3b8f943b51a0d9c07cbbc8ef5 74
+  3b064ee8ee3e50;
+
+  9bcddc16266b3eddd8cdc6d6308782a3 23
+  01379bb82c4cd67dbbb19b8dac61;
+
+  a2a882380b875b1d7f5be67277ed9f89 61
+  05154411c05c3ad8eb;
+
+  e47aad1d2f5562c9c24c665f12284b0f 38
+  0391eab474bd558b27093199;
+
+  a7783518dd7185c0462bb185e4094644 58
+  29de0d46375c617011;
+}
+
+# --- Arithmetic tests ---
+#
+# For each of the fundamental operations, there's a sequence of simple tests
+# which ensure that the functions are working even slightly correctly.  Then
+# there are some tests aimed at limit conditions in the algorithm.  Finally,
+# some random tests dreamed up by the Perl script `mpx-gen.pl' are given.
+
+uadd {
+
+  # --- Simple sanity checks ---
+
+  00 00 00;
+  00 01 01;
+  01 00 01;  
+
+  # --- Carry propagation tests ---
+
+    ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+                                                          01
+  0100000000000000000000000000000000000000000000000000000000;
+
+                                                          01
+    ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+  0100000000000000000000000000000000000000000000000000000000;
+
+    7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f80
+    80808080808080808080808080808080
+  0100000000000000000000000000000000;
+
+  # --- Random data tests ---
+
+    44cd8885b07bd0da90c0936c150b12120f63cfa1cb4aadc38a272acd37213d7b
+    efc5009f41d17ad2920d3fa71852b928b589c980d377445e9f6e2cd69069527f
+  0134928924f24d4bad22cdd3132d5dcb3ac4ed99229ec1f222299557a3c78a8ffa;
+
+    c73052fa5512dfb9eb28346277591dac7c48b71259f2a7c99baebb676562572c
+    92aa26e8bc06a1a82fd50ba72e2853ab710abecafd6694981450007ab357a646
+  0159da79e3111981621afd4009a5817157ed5375dd57593c61affebbe218b9fd72;
+
+  29974053a6a851f0f91c21854515fc5345f370f7dce64afc2fbce307f217181c
+  af596f5502c146fbdd6881237d7e76c272e7b94ece044afec02e05b3451ecff5
+  d8f0afa8a96998ecd684a2a8c2947315b8db2a46aaea95faefeae8bb3735e811;
+
+    df49df444cdb33c514f048414aa0ce79727a33ca9edfb3ec70a83c37d12db9b1
+    7798f5c37328888819d0c9647098dee31211adb1f1619d6209da99db08528d7f
+  0156e2d507c003bc4d2ec111a5bb39ad5c848be17c9041514e7a82d612d9804730;
+
+    9f79382bec6690faf222e274b103b0c3d41c3b322f5434ecbdad4883361f0ed6
+    98470184ae917fa0b361156564c62839e2646b11b8a0fe754d47f98466085afe
+  0137c039b09af8109ba583f7da15c9d8fdb680a643e7f533620af542079c2769d4;
+
+  f0351c4eba4c71674ff8cf26dd0dd5ff40d26dcb03f582812f3dbd237ecaf66f
+  0012bdba5f2f22ae28f1d405ffaa043f7d710a80668d0296cabfba4989b0b889
+  f047da09197b941578eaa32cdcb7da3ebe43784b6a828517f9fd776d087baef8;
+
+  06f706cef447e3fdb36f5604707b3e40db808c6641f07ac1fd539fda89e7a48f
+  dfab5dd3f241d0a5b127aa21a2e8617e69eee5aadf5f6bddb30bb73cf35bcbd2
+  e6a264a2e689b4a36497002613639fbf456f7211214fe69fb05f57177d437061;
+
+  c3e6631ee694b69218154d10f19626362f71b29458b96e8a5348a35a1d981fe0
+  7e83fe6517b4f730ca4541bcdc67f30cd9a5a0315f0ebcb2565f0d73f72d5476
+  01426a6183fe49adc2e25a8ecdcdfe1943091752c5b7c82b3ca9a7b0ce14c57456;
+
+  92b69d7e5cad1ff6271375b532c5c37802ef579375490104b0ac13d1af93bd41
+  4a5abfa608df9d2ff212e425d7a79dda97f56d0c3f6f10ef1b24c1cab77e0c01
+  dd115d24658cbd26192659db0a6d61529ae4c49fb4b811f3cbd0d59c6711c942;
+
+  caee73c8e35cf5dc4c11e0b70078e798168d9a70d0a4f18f7d511c73c99a8e93
+  89025c6d5f514aab622a6262a34afbb9d89629a93a1b39b86c562c36f0bbc97a
+  0153f0d03642ae4087ae3c4319a3c3e351ef23c41a0ac02b47e9a748aaba56580d;
+
+  89fdfe850befa6d52d66d310703853298ba0db3ed2316569d1d5784e070ca391
+  0aa2171591bdeabf23bed094f724be82c499c197ca27009cfc78ea04858d958f
+  94a0159a9dad91945125a3a5675d11ac503a9cd69c586606ce4e62528c9a3920;
+
+  5587392e6ac948f8526165f810ece85e36de8e100c0dfbcd0aecc4ca03242958
+  ab6287162bd00f7e31757641615fa0973d2ea84a3ca4184690dc1093013aecad
+  0100e9c0449699587683d6dc39724c88f5740d365a48b214139bc8d55d045f1605;
+
+  d5c8a06c311bb9970caee9bd4b7f58189dc3e221078d0d6a45968d0cb608898c
+  d02af80145b2995160820fab0267c49f2ba6c13334ce9d79652a851c320fa803
+  01a5f3986d76ce52e86d30f9684de71cb7c96aa3543c5baae3aac11228e818318f;
+
+  ca33cb876803ee0bbdfce0323fe5e16696be8c6aec737e291cdc109a04adb1cf
+  e17c574a8045553e413570811b51e8b110741cfde89b26057836a07de3514cc5
+  01abb022d1e8494349ff3250b35b37ca17a732a968d50ea42e9512b117e7fefe94;
+
+  dacd4ef6e248346fafb0d415af59679ce7bfcbca350b54891754736e691df743
+  eb453ace8d6f3d3c201152cf6aba6c5279381daf4471395bc5adca2fcac172b5
+  01c61289c56fb771abcfc226e51a13d3ef60f7e979797c8de4dd023d9e33df69f8;
+}
+
+usub {
+
+  # --- Simple sanity tests ---
+
+  01 00 01;
+  02 01 01;
+  05 03 02;
+
+  # --- Carry propagation tests ---
+
+  0100000000 01 ffffffff;
+  010000000000000000 01 ffffffffffffffff;
+
+  # --- Random data tests ---
+
+  c41ffa68b595f9a1928b6d88b1f090e1f530a68fabd0d984a428e37e757ef039
+  9deba253809cf51228639ada532bbb495b62d90632b28bd7db6f5551ed468b8b
+  2634581534f9048f6a27d2ae5ec4d59899cdcd89791e4dacc8b98e2c883864ae;
+
+  a0b3854388ab68fdee71148082d258cb2ef472317304e06ab86216fdc7317067
+  2d3a9812a3d42524754309169110bed7485b9ba7027e91aff7b481ab44651b72
+  7378ed30e4d743d9792e0b69f1c199f3e698d68a70864ebac0ad955282cc54f5;
+
+  3dc1ee5c9378abc228f30a498e56286289eaafd22e886c375a0f68a1cc4f2d0a
+  111c66a4951266bd05710693c82ff5511aa423482d9080879fe8296c38577649
+  2ca587b7fe664505238203b5c62633116f468c8a00f7ebafba273f3593f7b6c1;
+
+  fe9b804e286cec9c9d692bfda5d37fbb49c352e02bdfb864153e40024e041e4c
+  2deed6644f8deb9e73317c8e5f3ca8821675449696678dd8393585dbed0fc41b
+  d0aca9e9d8df00fe2a37af6f4696d739334e0e4995782a8bdc08ba2660f45a31;
+
+  ac29a21eface012500e45ddcadec251000b2862a08e19025e5179c2993fc183f
+  aa30c9b372d02ce22b32e237dbc98e4862148d7529555b651c038776437b60ee
+  01f8d86b87fdd442d5b17ba4d22296c79e9df8b4df8c34c0c91414b35080b751;
+
+  c7ee50b4057c5d6cba06edbd688d1e6eb39325f9ac8161e8c7aac219f6ae56bd
+  9ca672a123d00dddd6fb9a3f88b8ad3c4bd236f85397e11a41a43438528af6ee
+  2b47de12e1ac4f8ee30b537ddfd4713267c0ef0158e980ce86068de1a4235fcf;
+
+  8d659c5d85060904a8fd896e66893d169345e7854a5402a94ed7f2855472c1e1
+  0510e560d0206aac7ea1f484c668ffceb00a07d1f1046d7d5ff9d448377c803c
+  8854b6fcb4e59e582a5b94e9a0203d47e33bdfb3594f952beede1e3d1cf641a5;
+
+  aa61e8465ac278e26d74a939726545fa734b0df8a1f9fb55b58f223e61a4970c
+  0680536142cc43af40ece8b3522eadc57ababe1bb4b971694894a8aa393fb63f
+  a3e194e517f635332c87c08620369834f8904fdced4089ec6cfa79942864e0cd;
+
+  8155e4dacaa29374d584cde1139b0c0f02bd3bfbb8408747017d59f97ace3cfc
+  2320d7eec36a6298ef2f7a02cb8712cd444dc9fd8e51458fce9f89496dc54590
+  5e350cec073830dbe65553de4813f941be6f71fe29ef41b732ddd0b00d08f76c;
+
+  eaadcec668ec474fab18c6e1aca9d048eee832d90129af092394f11131eb4e1c
+  991ce202092952b5421896efc26637b04f6a8a5194395ab7ce4cc9ff37171cd1
+  5190ecc45fc2f49a69002ff1ea4398989f7da8876cf0545155482711fad4314b;
+
+  610a9c737e8b0854d4362bd5dfcba7b73bfb05ca0082efcbcf3b08b41f051281
+  0faff48e3afde20f330ee412da8cc91588cfdf8951ce5421095dd62962e8aa72
+  515aa7e5438d2645a12747c3053edea1b32b2640aeb49baac5dd328abc1c680f;
+
+  344c313534bf5212d0f7bddb2e7d674c9b83fbbf372248f5b6aa2e481aa1f94e
+  1fc4da8000e78d1dde10a4ab0b37bf8b1d1e1caf23b32688be946139916f72b1
+  148756b533d7c4f4f2e719302345a7c17e65df10136f226cf815cd0e8932869d;
+
+  d4ee443b04b30d354b9573a6a1cf466d1c8d7921c65cd6af6a8992d8bb11578f
+  11a170c467156fd13097883d5a0b5ca0cb4d460c0439e3b5e80eb2e36d327e7f
+  c34cd3769d9d9d641afdeb6947c3e9cc51403315c222f2f9827adff54dded910;
+
+  11e03f0bfd28ee2435aebd8873d43f09b98f4acc8db9b83ac4f8db8bef215500
+  011a9975f91de9e3260dc09952c517b795e54f4012fe6febac0a40a1c7f746c9
+  10c5a596040b04410fa0fcef210f275223a9fb8c7abb484f18ee9aea272a0e37;
+
+  54e22394a26744c5d192f1c002531b120a4966b18cc77db523dce28971ca34c5
+  43bffa793fc043b0226a4e2cef6f615a0fb72d54a64261cc285b5e2d6695e8aa
+  1122291b62a70115af28a39312e3b9b7fa92395ce6851be8fb81845c0b344c1b;
+
+  befad4be8c75125466021b8682d4a2bbd79cf28ea0d1225fa59cd6263ca76dfa
+  a241b82eb7cb831ece9ea45073460b4be3fed984cffce37498ba9bd46109cf04
+  1cb91c8fd4a98f35976377360f8e976ff39e1909d0d43eeb0ce23a51db9d9ef6;
+}
+
+umul {
+
+  # --- Simple sanity tests ---
+
+  01 00 00;
+  00 01 00;
+  01 45 45;
+  45 01 45;
+
+  # --- Random tests ---
+  
+  1d84890139ea943aaff05e8050875ad3
+  4d4fa99f86fef735264ed3d4fc9c0019
+  08ea0caa89201aafce27f5cf8c2d0babe4add1023cdc5545522caa26e9cbde9b;
+
+  a29dc17954d2401b8c523e6846b8801d
+  95d8c5814661dbbd70e984eafa1a389c
+  5f2f842c60d41962701062926eda9bc7c94b462db3f9f2f1bc85415ec96669ac;
+
+  7d8d16b1fdc261a8dab34a97a67b8b7d
+  978d1c4cdffec143d9447d05763c7bf3
+  4a536cf99eef77cd30a115a77cdb8d9b47a84bc929a8ecc8b50864a1b29676a7;
+
+  74343b6d685b9973642a4c31e7211957
+  7799afe6dc99ef626ab3304bb6b3082b
+  364a0aafdf95e4a8b3b337d1ffceff866eec36193aac68278ffa3c406d2ef99d;
+
+  0a09e7fc90bec4eb64cb10e4e75c6ad7
+  5dd5a810d092d68cc0371b2a9d5423a7
+  03adfa1beec3c996e9268e0cf27288ab3c88d6ff24b056d959661d1379711741;
+
+  10abe37b5f9c4ae712a1bb25521b18ce
+  73663a4db4fdb6521651f41a78487289
+  0783df7910220f62eccf06aef2f0b36ee91947a8884851e7d6726db48b7c023e;
+
+  75142f87a6a86fc67402d57e96da6d20
+  a24f01ef1d073eeb4284eeab096b6c7e
+  4a3ae830f1a185b77964d7ac1827ceb576496c459d6fa43f5487db7421eb35c0;
+
+  a53985bf9e73e36b24ebc5af72f9a33b
+  e706a52c88d692ed64ec71a09acb6040
+  951b31a3dbe0d2f49059f52f44672853ba121c666438696f85d49f004967eec0;
+
+  086ffb56c05db6a7f060d949b2fe21ff
+  131f72a18f76808812702b7a7c79e684
+  a158fe10dc686014a9711c0bd7458b2457c389664342d02612fbec331ba17c;
+
+  773ca7cff8e378f0d3bfbe137fe4afa4
+  b97782907edfc90839902cb40a267981
+  56627f4766f72b93c37746612b8de68c1a0b36c2a9a6cde2d9959965039905a4;
+
+  6186ed3d76c5e6c016d0fc1ccbb96abb
+  c9fec3054270bed526231f3df361ca54
+  4cf3fe706ce56b18d083f35c101ee86ec6d32de26841d4d79877b75318e9935c;
+
+  030a3d74ce79826cff754fc113dc6e53
+  96ea50f14e74041715ca6b2b9a46889d
+  01cac854ae86c8634d704250d001ae3b8225197da1715fc946afbd8b617dc0e7;
+
+  df9c25f4901820bab91929b121f73b41
+  c251d71d0403b22f7688efb8f9c7a7d9
+  a9bbd110d3a63d38bd48d3e34d1a89c48f5959d11e1b52bfadce09d75abfa119;
+
+  58e0b78e3996fbe7369f42459abfa30e
+  61349cb4f0ac16ae4caa4070a6d863fe
+  21bf6999ee200e26c3007fa0d2a1eaf0a6d0046fb5cdc932e19e57744e0231e4;
+
+  adb6347cc0f3ef1d6674ae34c9104a55
+  d6a34db1ef09742382ac6acfb4408b62
+  91a51f9c3fb21ab593d5afe9bf5207ca76572ac09c8be9caabe25e7229d89b8a;
+
+  40b8c873e24afb21d82214f61ed54be0
+  63bff45ebfa43ca544a0889e4b0a038c
+  1937fd2a7254468ffb3ad85e7936c055fdcc5877ee892ea2c97bdec4f3491e80;
+
+  0c48c20a8df571d8355bab32c2e04fea
+  446bc105015217f874b25d5e2ce27238
+  03487f36ffe480457b9dc246ba542fed0eac52466650edb4feb1ff91493baf30;
+}
+
+usqr {
+
+  # --- Sanity check tests ---
+
+  00 00;
+  01 01;
+  02 04;
+  ff fe01;
+
+  # --- Random tests ---
+
+  7b94927f1dc0fbb34cb3c0c604511e83
+  3ba81affdd67160ffb0cf4f97322efccd521a69f46696064ce84554c6a88f709;
+
+  f15f0fc21e5e6a514ca7834b8d3e77c9
+  e3941ef83038a10115d33778cf1b460b302b02ef9c1c08ab9f5dc4f7a7687bd1;
+
+  d3998c40e8ea19ef4fa5c483b964b327
+  aee6794bf25f5dc8d2ac51f0575c9ad1766e0f183d633adc77ebc474d1d78ff1;
+
+  fd4c6079bd59baa679e1ac3c952dc5fc
+  faa00d7a0ce7501bb69d56439b259a426ec1fb7b37abe93a0365bec68bb5d010;
+
+  c23e9dbaf7cf571cf0e9c1445ee7049f
+  9362f660275524f7692cd1b9df042aa56f4ae0d7a51d27536c4eaa561b075ac1;
+
+  ecd70f464c7093e2ee74fc2aa0dfbcf6
+  db1d38d445ed4605e48cbacabf5225795ac9b0d92771e8465176c076400e3c64;
+
+  62f727e3f5eca344795ed878c15a1a68
+  264229288864fb8fa2b6066acfe65f3caad90b410bbfa19f97713d0763d94a40;
+
+  fe9fe42b9b88a2be128ab395a96635b9
+  fd41aca3c22c0b24552e3f88d666ef03ec7f1ec1116d86bf7fa75b171cb21fb1;
+
+  2a3e9ab5ec12067bd1e49276233d482d
+  06f89a12ff13a4291fd40b9cb6c766b9c7796fb9f65d42f671d3ade3c7cb57e9;
+
+  5822befe400521765d0658d61ba2fb79
+  1e57e806160aebe8fb41bc8e51d80772cd93e76baac0a1f7f807671ac22a7f31;
+
+  279469187b9301a94ff00d401725d114
+  061e8e0f251ac43180b35cee5c4e95748594902a97ac84bfc9bc6327b289a990;
+
+  50eba27574d0144c1d0873d8dc70bba1
+  19941e6d13bf60702b12b3c36dde5958a0af3c1fe1cc6ee838b139d16e649b41;
+
+  d5ef817ea1be4b65ecebd00bfbf5cd31
+  b2c86d8fc519886dca10a1e77cf5874148315b14c48be0421c812e967a418361;
+
+  d6787d5da30d4a031c7dd2f7bba1a11a
+  b3adaa4e51c7a7ad7055cfb219624209fd5140bb3464c541cb1d0f940415b6a4;
+
+  650b6ef5bd3ef19916d969a252088e74
+  27e20610a08a08916d2f82e7b17f2c2ea752b1ca997fc7dc62a0ee5b8684e490;
+
+  c265ede35f7e35225fe5350a3afd161b
+  939ea5222f336ae03249d96bac34e5e1e7af5725ca07a9330ad29054ef46a6d9;
+
+  6ee04a9584bcef1480526180d336fffb
+  3005849b197570290520e5ff80f19517838a4975f217d952900be6c8bfda0019;
+}
+
+udiv {
+
+  # --- Simple tests ---
+
+  09 04 02 01;
+  ffe3 01 ffe3 00;
+  cdef fedc 00 cdef;
+
+  # --- Random tests ---
+
+  ccf89f84f1d372a1a22c3110057ea5029ed41f80b228b4d60f715a2c762aea43
+  8ac7135d39
+  017a1b1251a33756c0394200aaac9b92c34e3941f7376aca98fcef4f
+  1a570ceeac;
+
+  70b42f42a8009b7487ef72d92d953e7875f504931a51fc8a12827526351074a6
+  a4e86da483e12b735305a1e943195f391ef2546fefde827154
+  aef59897fb0e23
+  54013b962521a1f3a188122c466499d2361b694091fdac5e2a;
+
+  f34ad29dc7c79d103de95f949f7cea0bb281fb9c449d5d04f91bc1720bb19ffe
+  729bc43939d47622340ac2b1f5ce6377ca00bb675dbf607881d3843372822fe4
+  02
+  0e134a2b541eb0cbd5d3da30b3e0231c1e8084cd891e9c13f574b90b26ad4036;
+
+  91ec8a90dce0998a829f7e1d14a19d67fbdc385e900499a4454e8b2cd75a8868
+  13f823f492ae76312c
+  074eb2dee8aa8a051072fc85cda9b0eff449112b6814d00c
+  0d9de812f2ea6c7a58;
+
+  2eead8eb14366761116edadf05e5158e1bfa3b083045cfed87f667de43502671
+  ff5d4e35c5b04733
+  2f08bd1cf2e4f98dd3499c68d6d3964b24c9e439bde5719a
+  fa8e5da73038cec3;
+
+  a9708c69513c742bceaca8aabf5346e8404cd0a2bf349d75d8a961780b6b06b4
+  921d2ccf92589e3f0048fe538ee794dbb7379aecd410c57d713e89dd
+  0128de2fd4
+  18a1dc9645456613f27da18841d006b1a1238b82d8cb4a28b2ab48b0;
+
+  38c227704fedabc6510a9acbe75b7e4bfe28f8fd8f042056664580576254fd9b
+  250c66
+  018831895ae3e9ad0e8648cebc387b8379e4bf897b25d18d77858ea91905
+  0fc99d;
+
+  827a593d2b359870f364c6aa20a5725df0e3cc3c84f072188b856dfdbb920e3e
+  687b
+  013fb30f46f66f3d85e29fbae0d5389df15d587cd9ece18e16d50c789d0055
+  5d67;
+
+  681f8273f0116c8a7210c79ad77eaa87f3f96b8178edf46c0a3be80b82632feb
+  b15e72c3cafc36dbc3d1b2427b3a3574a5
+  964868d951607b1ed391705aa3d9ef
+  1cda643b01015c91184b150a6d938c6ce0;
+
+  f93e69eeb878e055aceb9df3f0d3920d3a1d9dbd3cc894b0251ca8acbb3f40b5
+  a9a33622848ccf6f29c260fd556d3772
+  0178224081d3eb75b2422bced0f03ee8be
+  930cd441adbbb8db02013a2e0c54ca19;
+
+  8e458afb2147921fef71189dccc20dc6b6cb2766460599cd3b84bf69094ee098
+  6b93b5b225d4a297ed3f64af4d2b661852cd5f
+  01529004c1b96fef630ad9ea8d6e
+  668c578a24484fe7b96f434c2bafa9bac74ec6;
+
+  92b4756ef93bfae27e96c9c1e68b46aeaad82f65ba779ae36c34e008233891b6
+  0724e6431fc8c1b592839c1dc94ac8a17a2e5cf1c83f5efc20662059f8d6
+  1488f6
+  679029a6e071fde2065524719e8b24e29452cc17d5acbcf5adcfd9c412;
+
+  d9f36f886f9e1971fd3c070a0156282803a733f747f2ec9df7c3a2172fe27808
+  e8914686aab784e6bf8ee815b610195e4411a637fd442fc1e646f1
+  efe925f08b
+  ed1ee96dac1ff9131c231eb19fbc2d033f9fc8f4fe886b83032d;
+
+  dc283159b054eaee94a941d3c075f1231c992101ee17d7abea233125fed5efdb
+  2034ae741f9c09c9dedc8953cdac7067ce7256e54902d06c34f66a09e5460705
+  06
+  1aec1aa0f2acb0335b7e09dcee6b4eb445eb17a23806f522ac5cb4ea9f31c5bd;
+
+  8bd46fce7eb788108fd223cf2be26ac36e48ab048fb622ec056e87efda1bab65
+  1a336ed2bc7e628ea231ba849b7ef2e429f773e01a60e688e8d5620380c8
+  05563a
+  0ecee92e7189260c0b4b541fcbf2eea8c4a6822f1ad940072e98f4254e15;
+
+  049a44b4b7e4fca97415cb5bf2da86d15fe572cd5e5be03639f7b0730800960c
+  dac151bfbefa33d3c68fc6a0159700fa0ace5866
+  0562e0cfbfd280e5c6d15e2e
+  a27eb3df5b333ae2a1368bb64187357a43313fb8;
+
+  e0ef0f2eee0cbfc761e1eae2c4056c9dc067194f56584c47396c24d791fcb171
+  c0a0dbcc60a22e418d1106927da452e4bda23a16ee814f5ba626eca3d75e
+  012aee
+  b9c6ad8e1f2812baf3682193555a6afff4dea36409aec2ce5d30d8f70c0d;
+
+  9097d696bbe69c0cb38186dc7fbc400c7325adf453026dac0392960e24dae8b5
+  be4c2ca5e8395869bf35e97c75f6ef
+  c283fc9af122375dc1c7abac24f0267b3d
+  4be3e17c0d0c7b8fa0300017a03cc2;
+}