factor: add code to test isqrt() correctness

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2017-04-10 13:53:57 +02:00
parent dd3a395053
commit ad5394d591

View File

@ -203,6 +203,23 @@ static NOINLINE void factorize(wide_t N)
int factor_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int factor_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int factor_main(int argc UNUSED_PARAM, char **argv) int factor_main(int argc UNUSED_PARAM, char **argv)
{ {
#if 0 /* test isqrt() correctness */
wide_t n = argv[1] ? bb_strtoull(argv[1], NULL, 0) : time(NULL);
for (;;) {
half_t h;
if (--n == 0)
--n;
h = isqrt(n);
if (!(n & 0xff))
printf("isqrt(%llx)=%"HALF_FMT"x\n", n, h);
if ((wide_t)h * h > n)
return 1;
h++;
if (h != 0 && (wide_t)h * h <= n)
return 1;
}
#endif
//// coreutils has undocumented option ---debug (three dashes) //// coreutils has undocumented option ---debug (three dashes)
//getopt32(argv, ""); //getopt32(argv, "");
//argv += optind; //argv += optind;