@@ -894,7 +894,7 @@ static int test_mp_prime_rand(void)
894894
895895   /* test for size */ 
896896   for  (ix  =  10 ; ix  <  128 ; ix ++ ) {
897-       printf ("Testing  (not safe-prime): %9d bits    \n " , ix );
897+       printf ("\rTesting  (not safe-prime): %9d bits    " , ix );
898898      fflush (stdout );
899899      DO (mp_prime_rand (& a , 8 , ix , (rand_int () &  1 ) ? 0  : MP_PRIME_2MSB_ON ));
900900      EXPECT (mp_count_bits (& a ) ==  ix );
@@ -907,15 +907,264 @@ static int test_mp_prime_rand(void)
907907   return  EXIT_FAILURE ;
908908}
909909
910+ /* Some small pseudoprimes to test the individual implementations */ 
911+ 
912+ /* Miller-Rabin base 2 */ 
913+ static  const  uint32_t  SPSP_2 [] =  {
914+    2047 , 3277 , 4033 , 4681 , 8321 , 15841 , 29341 , 42799 ,
915+    49141 , 52633 , 65281 , 74665 , 80581 , 85489 , 88357 , 90751 
916+ };
917+ 
918+ /* Miller-Rabin base 3 */ 
919+ static  const  uint32_t  SPSP_3 [] =  {
920+    121 , 703 , 1891 , 3281 , 8401 , 8911 , 10585 , 12403 , 16531 ,
921+    18721 , 19345 , 23521 , 31621 , 44287 , 47197 , 55969 , 63139 ,
922+    74593 , 79003 , 82513 , 87913 , 88573 , 97567 
923+ };
924+ 
925+ /* SPSP to all bases < 100 */ 
926+ static  const  char  * SPSP_2_100_LARGE [4 ] =  {
927+    "3L2x7YRmz7g4q+DwxESBacAClxrNiuspLCf8BUEphtky+5VNHLAb2ZZLLI0bu6cAOtNkUXenakBCCL" 
928+    "Vn7gqOpkcrQ/ptxZdk+4gnI99wFjgcfM512N71ZzbwvLe+5Pzat2k+nHIjE0w/WbQvzk4a2/syAY8S" 
929+    "i1B5XRjXYVAQOLyNWhsFpXeWXUgqiNzv7avfwBA3ZOXt" , /* bases 2 - 100 */ 
930+    "JOcSIwxGqGEjeQ2GsdlnFMwhc+xY7EtZo5Kf4BglOuakxTJaP8qrdZyduXaAZUdzyPgQLf7B8vqvVE" 
931+    "VLJwH7dLkLEiw19tfu3naT6DgQWzk+b5WuwWJzsTMdgWWH86M1h/Gjt2J/qABtTTH26C8bS4v/q9Fh" 
932+    "R8jqHNOiufUgHkDQdW9Z+BLlf6OVVh2VwPIOGVc7kFF" ,  /* bases 2 - 107 */ 
933+    "1ZCddPKHO7yeqI5ZeKG5ssTnzJeIDpWElJEZnHwejl4tsyly44JgwdiRmXgsi9FQfYhMzFZMgV6qWZZ" 
934+    "sIJl4RNgpD/PDb3nam++ECkzMBuNIXVpmZzw+Gj5xQmpKK+OX8pFSy2IQiKyKAOfSaivXEb2/dga2J/" 
935+    "Pc2d23lw+eP3WtBbfHc7TAQGgNI/6Xmcpl1G64eXCrJ" ,  /* bases 2 - 103 */ 
936+    "cCax282DurA+2Z54W3VLKSC2mwgpilQpGydCDHvXHNRKbJQRa5NtLLfa3sXvCmUWZ9okP2ZSsPDnw0X" 
937+    "dUQLzaz59vnw0rKbfsoA4nDBjMXR78Q889+KS4HFKfXkzxsiIKYo0kSfwPKYxFUi4Zj185kwwAPTAr2" 
938+    "IjegdWjQLeX1ZQM0HVUUF3WEVhHXcFzF0sMiJU5hl"      /* bases 2 - 101 */ 
939+ };
940+ 
941+ #ifndef  LTM_USE_ONLY_MR 
942+ /* Extra strong Lucas test with Baillie's parameters Q = 1, P = 3 */ 
943+ static  const  uint32_t  ESLPSP [] =   {
944+    989 , 3239 , 5777 , 10877 , 27971 , 29681 , 30739 , 31631 , 39059 , 72389 ,
945+    73919 , 75077 , 100127 , 113573 , 125249 , 137549 , 137801 , 153931 , 155819 ,
946+    161027 , 162133 , 189419 , 218321 , 231703 , 249331 , 370229 , 429479 , 430127 ,
947+    459191 , 473891 , 480689 , 600059 , 621781 , 632249 , 635627 
948+ };
949+ 
950+ /* 
951+    Almost extra strong Lucas test with Baillie's parameters Q = 1, P = 3 
952+    Only those that are not in ESLPSP. 
953+  */ 
954+ static  const  uint32_t  AESLPSP [] =  {
955+    10469 , 154697 , 233659 , 472453 , 629693 , 852389 , 1091093 , 1560437 ,
956+    1620673 , 1813601 , 1969109 , 2415739 , 2595329 , 2756837 , 3721549 ,
957+    4269341 , 5192309 , 7045433 , 7226669 , 7265561 
958+ };
959+ #endif 
960+ 
961+ /* Some randomly choosen 200 decimal digit large primes (https://primes.utm.edu/lists/small/small2.html) */ 
962+ static  const  char  * medium_primes [10 ] =  {
963+    "C8Ckh0vviS3HUPdB1NSrSm+gOodw/f1aQ5+aaH1W6RMB0jVkO6lTaL54O3o7U5BSGUFGxm5gAvisbJamasuLZS8g3ZsJ2JM4Vtn9cQZRfkP6b8V" ,
964+    "64xDN9FqLBiovZ/9q/EPm0DONpIfn5MbJKHa+IjT0fjAzkg34FpAmad+CwhcpKaiTbZEpErut+DhpVyiQfqBFrgcGnGhhIrMF/XkyY3aVx6E96B" ,
965+    "8cyuMlENm0vh/eWwgHUpDKqmLyCSsRQZRWvbHpA2jHDZv1EhHkVhceg3OFRZn/aXRBnbdtsc2xO6sWh9KZ5Mo7u9rJgBJMVtDnu094MCExj1YvB" ,
966+    "BRFZFsYjSz45un8qptnuSqEsy9wV0BzbMpVAB1TrwImENOVIc1cASZNQ/mXG2xtazqgn/juVzFo91XLx9PtIlkcK0L2T6fBNgy8Lc7dSVoKQ+XP" ,
967+    "Ez/mDl+to2gm69+VdIHI9Q7vaO3DuIdLVT69myM3HYwVBE+G24KffAOUAp3FGrSOU+LtERMiIYIEtxPI7n/DRJtmL2i0+REwGpTMge2d2EpabfB" ,
968+    "5+Uz1gPFjZJ/nNdEOmOaMouJSGzygo42qz7xOwXn/moSUvBpPjo4twRGbK0+qaeU/RI8yYYxXr3OBP4w+/jgL3mN9GiENDM5LtEKMiQrZ9jIVEb" ,
969+    "AQ5nD1+G1grv41s/XlK+0YTGyZgr/88PzdQJ8QT9tavisTgyG6k8/80A4HQhnFndskHNAaB2EW5fE7KH3kk7m89s8JnVqkJyGZWSfs1+JlmHLPf" ,
970+    "3F19vPmM0Ih89KZ04Xmd62QB9F6E2sztT10A7Kcqc44eKvsNHh+JY6Z6gJXkbWg1Iw7xr29QAhEF/o1YAgfutQtpdzHkex06Yd71kPsaZdKXiC5" ,
971+    "2fIcJ1t/VYCColXGs+ji/txNMEXn2FXdowLzlo7QKqzAWHdAbwtltSO5qpSp3OUiEOGUUi3hbyw3iQRE8nFJaikJ89Wdox6vpPtIsc3QRjexMnv" ,
972+    "8aOicQ5gIbFCarFUgSgzh40LpuZ0jjK1u48/YT+C0h1dAQ8CIEgZjHZT+5/7cCRGmJlo+XCp7S41MSQ2ZNRSJh2texRYtvAXBAZfR8A8twl316P" 
973+ };
974+ 
975+ const  mp_digit  prime_tab [] =  {
976+    0x0002 , 0x0003 , 0x0005 , 0x0007 , 0x000B , 0x000D , 0x0011 , 0x0013 ,
977+    0x0017 , 0x001D , 0x001F , 0x0025 , 0x0029 , 0x002B , 0x002F , 0x0035 ,
978+    0x003B , 0x003D , 0x0043 , 0x0047 , 0x0049 , 0x004F , 0x0053 , 0x0059 ,
979+    0x0061 , 0x0065 , 0x0067 , 0x006B , 0x006D , 0x0071 , 0x007F , 0x0083 ,
980+    0x0089 , 0x008B , 0x0095 , 0x0097 , 0x009D , 0x00A3 , 0x00A7 , 0x00AD ,
981+    0x00B3 , 0x00B5 , 0x00BF , 0x00C1 , 0x00C5 , 0x00C7 , 0x00D3 , 0x00DF ,
982+    0x00E3 , 0x00E5 , 0x00E9 , 0x00EF , 0x00F1 , 0x00FB , 0x0101 , 0x0107 ,
983+    0x010D , 0x010F , 0x0115 , 0x0119 , 0x011B , 0x0125 , 0x0133 , 0x0137 ,
984+ 
985+    0x0139 , 0x013D , 0x014B , 0x0151 , 0x015B , 0x015D , 0x0161 , 0x0167 ,
986+    0x016F , 0x0175 , 0x017B , 0x017F , 0x0185 , 0x018D , 0x0191 , 0x0199 ,
987+    0x01A3 , 0x01A5 , 0x01AF , 0x01B1 , 0x01B7 , 0x01BB , 0x01C1 , 0x01C9 ,
988+    0x01CD , 0x01CF , 0x01D3 , 0x01DF , 0x01E7 , 0x01EB , 0x01F3 , 0x01F7 ,
989+    0x01FD , 0x0209 , 0x020B , 0x021D , 0x0223 , 0x022D , 0x0233 , 0x0239 ,
990+    0x023B , 0x0241 , 0x024B , 0x0251 , 0x0257 , 0x0259 , 0x025F , 0x0265 ,
991+    0x0269 , 0x026B , 0x0277 , 0x0281 , 0x0283 , 0x0287 , 0x028D , 0x0293 ,
992+    0x0295 , 0x02A1 , 0x02A5 , 0x02AB , 0x02B3 , 0x02BD , 0x02C5 , 0x02CF ,
993+ 
994+    0x02D7 , 0x02DD , 0x02E3 , 0x02E7 , 0x02EF , 0x02F5 , 0x02F9 , 0x0301 ,
995+    0x0305 , 0x0313 , 0x031D , 0x0329 , 0x032B , 0x0335 , 0x0337 , 0x033B ,
996+    0x033D , 0x0347 , 0x0355 , 0x0359 , 0x035B , 0x035F , 0x036D , 0x0371 ,
997+    0x0373 , 0x0377 , 0x038B , 0x038F , 0x0397 , 0x03A1 , 0x03A9 , 0x03AD ,
998+    0x03B3 , 0x03B9 , 0x03C7 , 0x03CB , 0x03D1 , 0x03D7 , 0x03DF , 0x03E5 ,
999+    0x03F1 , 0x03F5 , 0x03FB , 0x03FD , 0x0407 , 0x0409 , 0x040F , 0x0419 ,
1000+    0x041B , 0x0425 , 0x0427 , 0x042D , 0x043F , 0x0443 , 0x0445 , 0x0449 ,
1001+    0x044F , 0x0455 , 0x045D , 0x0463 , 0x0469 , 0x047F , 0x0481 , 0x048B ,
1002+ 
1003+    0x0493 , 0x049D , 0x04A3 , 0x04A9 , 0x04B1 , 0x04BD , 0x04C1 , 0x04C7 ,
1004+    0x04CD , 0x04CF , 0x04D5 , 0x04E1 , 0x04EB , 0x04FD , 0x04FF , 0x0503 ,
1005+    0x0509 , 0x050B , 0x0511 , 0x0515 , 0x0517 , 0x051B , 0x0527 , 0x0529 ,
1006+    0x052F , 0x0551 , 0x0557 , 0x055D , 0x0565 , 0x0577 , 0x0581 , 0x058F ,
1007+    0x0593 , 0x0595 , 0x0599 , 0x059F , 0x05A7 , 0x05AB , 0x05AD , 0x05B3 ,
1008+    0x05BF , 0x05C9 , 0x05CB , 0x05CF , 0x05D1 , 0x05D5 , 0x05DB , 0x05E7 ,
1009+    0x05F3 , 0x05FB , 0x0607 , 0x060D , 0x0611 , 0x0617 , 0x061F , 0x0623 ,
1010+    0x062B , 0x062F , 0x063D , 0x0641 , 0x0647 , 0x0649 , 0x064D , 0x0653 
1011+ };
1012+ 
1013+ #define  ARR_LENGTH (a ) ((int)(sizeof((a))/sizeof((a)[0])))
1014+ 
1015+ static  int  test_mp_prime_miller_rabin (void )
1016+ {
1017+    mp_int  a , b , c ;
1018+    bool  result ;
1019+    int  i ;
1020+    mp_digit  j ;
1021+    DOR (mp_init_multi (& a , & b , & c , NULL ));
1022+ 
1023+    /* SPSP to base 2 */ 
1024+    mp_set (& b , 2u );
1025+    for  (i  =  0 ; i  <  ARR_LENGTH (SPSP_2 ); i ++ ) {
1026+       result  =  false;
1027+       mp_set_u32 (& a , SPSP_2 [i ]);
1028+       DO (mp_prime_miller_rabin (& a , & b , & result ));
1029+       EXPECT (result  ==  true);
1030+    }
1031+ 
1032+    /* Some larger primes to check for false negatives */ 
1033+    for  (i  =  0 ; i  <  10 ; i ++ ) {
1034+       result  =  false;
1035+       DO (mp_read_radix (& a , medium_primes [i ], 64 ));
1036+       DO (mp_prime_miller_rabin (& a , & b , & result ));
1037+       EXPECT (result  ==  true);
1038+    }
1039+    /* Some semi-primes */ 
1040+    for  (i  =  0 ; i  <  5 ; i  +=  2 ) {
1041+       result  =  false;
1042+       DO (mp_read_radix (& a , medium_primes [i ], 64 ));
1043+       DO (mp_read_radix (& c , medium_primes [i + 1 ], 64 ));
1044+       DO (mp_mul (& a , & c , & a ));
1045+       DO (mp_prime_miller_rabin (& a , & b , & result ));
1046+       EXPECT (result  ==  false);
1047+    }
1048+ 
1049+    /* SPSP to base 3 */ 
1050+    mp_set (& b , 3u );
1051+    for  (i  =  0 ; i  <  ARR_LENGTH (SPSP_3 ); i ++ ) {
1052+       result  =  false;
1053+       mp_set_u32 (& a , SPSP_3 [i ]);
1054+       DO (mp_prime_miller_rabin (& a , & b , & result ));
1055+       EXPECT (result  ==  true);
1056+    }
1057+ 
1058+    /* SPSP to bases 2 -- 100 */ 
1059+    mp_set (& b , 2u );
1060+    for  (i  =  0 ; i  <  4 ; i ++ ) {
1061+       DO (mp_read_radix (& a , SPSP_2_100_LARGE [i ], 64 ));
1062+       for  (j  =  2u ; j  <= 100u ; j ++ ) {
1063+          result  =  false;
1064+          mp_set (& b , j );
1065+          DO (mp_prime_miller_rabin (& a , & b , & result ));
1066+          EXPECT (result  ==  true);
1067+       }
1068+       /* 107 is a prime that works */ 
1069+       mp_set (& b , 107u );
1070+       DO (mp_prime_miller_rabin (& a , & b , & result ));
1071+       EXPECT (result  ==  false);
1072+    }
1073+ 
1074+    /* SPSP to bases 2 -- 100, automatic */ 
1075+    mp_set (& b , 2u );
1076+    for  (i  =  0 ; i  <  4 ; i ++ ) {
1077+       DO (mp_read_radix (& a , SPSP_2_100_LARGE [i ], 64 ));
1078+       for  (j  =  2u ; j  <= (mp_digit )mp_prime_rabin_miller_trials (mp_count_bits (& a )); j ++ ) {
1079+          result  =  false;
1080+          mp_set (& b , (mp_digit )prime_tab [j ]);
1081+          DO (mp_prime_miller_rabin (& a , & b , & result ));
1082+       }
1083+       /* These numbers are not big enough for the heuristics to work */ 
1084+       EXPECT (result  ==  true);
1085+    }
1086+ 
1087+    mp_clear_multi (& a , & b , & c , NULL );
1088+    return  EXIT_SUCCESS ;
1089+ LBL_ERR :
1090+    mp_clear_multi (& a , & b , & c , NULL );
1091+    return  EXIT_FAILURE ;
1092+ }
1093+ 
1094+ #ifndef  LTM_USE_ONLY_MR 
1095+ static  int  test_mp_prime_extra_strong_lucas (void )
1096+ {
1097+    mp_int  a , b ;
1098+    bool  result ;
1099+    int  i ;
1100+ 
1101+    DOR (mp_init_multi (& a , & b , NULL ));
1102+ 
1103+    /* Check Extra Strong pseudoprimes */ 
1104+    for  (i  =  0 ; i  <  ARR_LENGTH (ESLPSP ); i ++ ) {
1105+       result  =  false;
1106+       mp_set_u32 (& a , ESLPSP [i ]);
1107+       DO (mp_prime_extra_strong_lucas (& a , & result ));
1108+       EXPECT (result  ==  true);
1109+    }
1110+ 
1111+    /* Check Almost Extra Strong pseudoprimes (not in ESLPSP) */ 
1112+    for  (i  =  0 ; i  <  ARR_LENGTH (AESLPSP ); i ++ ) {
1113+       result  =  false;
1114+       mp_set_u32 (& a , AESLPSP [i ]);
1115+       DO (mp_prime_extra_strong_lucas (& a , & result ));
1116+       EXPECT (result  ==  false);
1117+    }
1118+ 
1119+    /* Some larger primes to check for false negatives */ 
1120+    for  (i  =  0 ; i  <  10 ; i ++ ) {
1121+       result  =  false;
1122+       DO (mp_read_radix (& a , medium_primes [i ], 64 ));
1123+       DO (mp_prime_extra_strong_lucas (& a , & result ));
1124+       EXPECT (result  ==  true);
1125+    }
1126+ 
1127+    /* Some semi-primes */ 
1128+    for  (i  =  0 ; i  <  5 ; i ++ ) {
1129+       result  =  false;
1130+       DO (mp_read_radix (& a , medium_primes [i ], 64 ));
1131+       DO (mp_read_radix (& a , medium_primes [i + 1 ], 64 ));
1132+       DO (mp_mul (& a , & b , & a ));
1133+       DO (mp_prime_extra_strong_lucas (& a , & result ));
1134+       EXPECT (result  ==  false);
1135+    }
1136+ 
1137+    mp_clear_multi (& a , & b , NULL );
1138+    return  EXIT_SUCCESS ;
1139+ LBL_ERR :
1140+    mp_clear_multi (& a , & b , NULL );
1141+    return  EXIT_FAILURE ;
1142+ }
1143+ #endif 
1144+ 
9101145static  int  test_mp_prime_is_prime (void )
9111146{
9121147   int  ix ;
9131148   mp_err  e ;
914-    bool  cnt , fu ;
1149+    bool  cnt ;
1150+ #ifndef  LTM_USE_ONLY_MR 
1151+    bool  fu ;
1152+ #endif 
9151153
9161154   mp_int  a , b ;
9171155   DOR (mp_init_multi (& a , & b , NULL ));
9181156
1157+    /* strong Miller-Rabin pseudoprimes to the first 100 primes (gernerated with Arnault's method) */ 
1158+    printf ("Testing mp_prime_is_prime() with SPSPs to the first 100 primes\n" );
1159+    for  (ix  =  0 ; ix  <  4 ; ix ++ ) {
1160+       DO (mp_read_radix (& a ,SPSP_2_100_LARGE [ix ],64 ));
1161+       DO (mp_prime_is_prime (& a , mp_prime_rabin_miller_trials (mp_count_bits (& a )), & cnt ));
1162+       if  (cnt ) {
1163+          printf ("SPSP_2_100_LARGE[%d] is not prime but mp_prime_is_prime says it is.\n" , ix );
1164+          goto LBL_ERR ;
1165+       }
1166+    }
1167+ 
9191168   /* strong Miller-Rabin pseudoprime to the first 200 primes (F. Arnault) */ 
9201169   printf ("Testing mp_prime_is_prime() with Arnault's pseudoprime  803...901" );
9211170   DO (mp_read_radix (& a ,
@@ -959,6 +1208,7 @@ static int test_mp_prime_is_prime(void)
9591208      DO (mp_prime_is_prime (& b , mp_prime_rabin_miller_trials (mp_count_bits (& b )), & cnt ));
9601209      /* large problem */ 
9611210      EXPECT (cnt );
1211+ #ifndef  LTM_USE_ONLY_MR 
9621212      DO (mp_prime_frobenius_underwood (& b , & fu ));
9631213      EXPECT (fu );
9641214      if  ((e  !=  MP_OKAY ) ||  !cnt ) {
@@ -970,13 +1220,14 @@ static int test_mp_prime_is_prime(void)
9701220         putchar ('\n' );
9711221         goto LBL_ERR ;
9721222      }
973- 
1223+ #endif 
9741224   }
1225+ #ifndef  LTM_USE_ONLY_MR 
9751226   /* Check regarding problem #143 */ 
9761227   DO (mp_read_radix (& a ,
9771228                    "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A63A3620FFFFFFFFFFFFFFFF" ,
9781229                    16 ));
979-    DO (mp_prime_strong_lucas_selfridge (& a , & cnt ));
1230+    DO (mp_prime_extra_strong_lucas (& a , & cnt ));
9801231   /* large problem */ 
9811232   EXPECT (cnt );
9821233   if  ((e  !=  MP_OKAY ) ||  !cnt ) {
@@ -985,6 +1236,47 @@ static int test_mp_prime_is_prime(void)
9851236      putchar ('\n' );
9861237      goto LBL_ERR ;
9871238   }
1239+ #endif 
1240+    /* Check deterministic tests */ 
1241+ #ifdef  LTM_USE_ONLY_MR 
1242+ #if  ((defined S_MP_PRIME_IS_DIVISIBLE_C ) &&  (MP_PRIME_TAB_SIZE  >= 256 ))
1243+    /* 2-SPRP 4188889 = 431 * 9719 < 2^22 */ 
1244+    DO (mp_read_radix (& a ,"4188889" ,10 ));
1245+    DO (mp_prime_is_prime (& a , 0 , & cnt ));
1246+    EXPECT (cnt  ==  false);
1247+    /* Last prime < 2^22 */ 
1248+    DO (mp_read_radix (& a ,"4194301" ,10 ));
1249+    DO (mp_prime_is_prime (& a , 0 , & cnt ));
1250+    EXPECT (cnt  ==  true);
1251+    /* 2,3-SPRP 6787327 = 1303 * 5209 < 2^23 */ 
1252+    DO (mp_read_radix (& a ,"6787327" ,10 ));
1253+    DO (mp_prime_is_prime (& a , 0 , & cnt ));
1254+    EXPECT (cnt  ==  false);
1255+    /* Last prime < 2^23 */ 
1256+    DO (mp_read_radix (& a ,"8388593" ,10 ));
1257+    DO (mp_prime_is_prime (& a , 0 , & cnt ));
1258+    EXPECT (cnt  ==  true);
1259+ 
1260+    /* 2,3,1459-SPRP < 2^32*/ 
1261+    DO (mp_read_radix (& a ,"1518290707" ,10 ));
1262+    DO (mp_prime_is_prime (& a , -1 , & cnt ));
1263+    EXPECT (cnt  ==  false);
1264+ #endif 
1265+    /* 2,3,7,61-SPRP < 2^43*/ 
1266+    DO (mp_read_radix (& a ,"7038007247701" ,10 ));
1267+    DO (mp_prime_is_prime (& a , -1 , & cnt ));
1268+    EXPECT (cnt  ==  false);
1269+ 
1270+    /* 2,325,9375,28178,450775,9780504-SPRP < 2^64 
1271+       which is also a 
1272+       2,3,325,9375,28178,450775,9780504-SPRP 
1273+     */ 
1274+    DO (mp_read_radix (& a ,"18411296009130176041" ,10 ));
1275+    DO (mp_prime_is_prime (& a , -1 , & cnt ));
1276+    EXPECT (cnt  ==  false);
1277+ 
1278+ #endif 
1279+ 
9881280
9891281   mp_clear_multi (& a , & b , NULL );
9901282   return  EXIT_SUCCESS ;
@@ -2579,6 +2871,10 @@ static int unit_tests(int argc, char **argv)
25792871      T1 (mp_montgomery_reduce , MP_MONTGOMERY_REDUCE ),
25802872      T1 (mp_root_n , MP_ROOT_N ),
25812873      T1 (mp_or , MP_OR ),
2874+ #ifndef  LTM_USE_ONLY_MR 
2875+       T1 (mp_prime_extra_strong_lucas , MP_PRIME_EXTRA_STRONG_LUCAS ),
2876+ #endif 
2877+       T1 (mp_prime_miller_rabin , MP_PRIME_MILLER_RABIN ),
25822878      T1 (mp_prime_is_prime , MP_PRIME_IS_PRIME ),
25832879      T1 (mp_prime_next_prime , MP_PRIME_NEXT_PRIME ),
25842880      T1 (mp_prime_rand , MP_PRIME_RAND ),
0 commit comments