factor: add code to test isqrt() correctness
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 10 Apr 2017 11:53:57 +0000 (13:53 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 10 Apr 2017 11:53:57 +0000 (13:53 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
coreutils/factor.c

index 4a131813b69eb6ca4eed67c3edecb669d8898418..7400174a7304d4c493bcebf64a0c5c9411fb141e 100644 (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 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)
        //getopt32(argv, "");
        //argv += optind;