Author: cem
Date: Wed Jan 29 22:37:01 2020
New Revision: 357273
URL: https://svnweb.freebsd.org/changeset/base/357273

Log:
  Revert r357246
  
  I have no idea what this code is trying to do, leave it be.
  
  Reported by:  lwhsu

Modified:
  head/tests/sys/sys/qmath_test.c

Modified: head/tests/sys/sys/qmath_test.c
==============================================================================
--- head/tests/sys/sys/qmath_test.c     Wed Jan 29 21:41:45 2020        
(r357272)
+++ head/tests/sys/sys/qmath_test.c     Wed Jan 29 22:37:01 2020        
(r357273)
@@ -47,7 +47,25 @@
 #define        QTEST_QITRUNC(q, iv) ((iv) >> Q_RPSHFT(q))
 #define        QTEST_FFACTOR 32.0
 
-#define        GENRAND(a)      arc4random_buf((a), sizeof(*(a)))
+#define        bitsperrand 31
+#define        GENRAND(a, lb, ub)                                              
\
+({                                                                     \
+       int _rembits;                                                   \
+       do {                                                            \
+               _rembits = Q_BITSPERBASEUP(ub) + Q_LTZ(lb);             \
+               *(a) = (__typeof(*(a)))0;                               \
+               while (_rembits > 0) {                                  \
+                       *(a) |= (((uint64_t)random()) &                 \
+                           ((1ULL << (_rembits > bitsperrand ?         \
+                           bitsperrand : _rembits)) - 1));             \
+                       *(a) <<= (_rembits - (_rembits > bitsperrand ?  \
+                           bitsperrand : _rembits));                   \
+                       _rembits -= bitsperrand;                        \
+               }                                                       \
+               *(a) += lb;                                             \
+       } while (*(a) < (lb) || (uint64_t)*(a) > (ub));                 \
+       *(a);                                                           \
+})
 
 /*
  * Smoke tests for basic qmath operations, such as initialization
@@ -195,9 +213,11 @@ ATF_TC_BODY(qmulq_s64q, tc)
 #endif
        int error;
 
+       srandomdev();
+
        for (int i = 0; i < 10;) {
-               GENRAND(&a_s64q);
-               GENRAND(&b_s64q);
+               GENRAND(&a_s64q, INT64_MIN, UINT64_MAX);
+               GENRAND(&b_s64q, INT64_MIN, UINT64_MAX);
 
                /*
                 * XXX: We cheat a bit, to stand any chance of multiplying
@@ -258,9 +278,12 @@ ATF_TC_BODY(qdivq_s64q, tc)
        if (atf_tc_get_config_var_as_bool_wd(tc, "ci", false))
                atf_tc_skip("https://bugs.freebsd.org/240219";);
 
+
+       srandomdev();
+
        for (int i = 0; i < 10; i++) {
-               GENRAND(&a_s64q);
-               GENRAND(&b_s64q);
+               GENRAND(&a_s64q, INT64_MIN, UINT64_MAX);
+               GENRAND(&b_s64q, INT64_MIN, UINT64_MAX);
                /*
                 * XXXLAS: Until Qmath handles precision normalisation, only
                 * test with equal precision.
@@ -301,9 +324,11 @@ ATF_TC_BODY(qaddq_s64q, tc)
        double a_dbl, b_dbl, r_dbl, maxe_dbl, delta_dbl;
        int error;
 
+       srandomdev();
+
        for (int i = 0; i < 10;) {
-               GENRAND(&a_s64q);
-               GENRAND(&b_s64q);
+               GENRAND(&a_s64q, INT64_MIN, UINT64_MAX);
+               GENRAND(&b_s64q, INT64_MIN, UINT64_MAX);
                /*
                 * XXXLAS: Until Qmath handles precision normalisation, only
                 * test with equal precision.
@@ -347,9 +372,11 @@ ATF_TC_BODY(qsubq_s64q, tc)
        double a_dbl, b_dbl, r_dbl, maxe_dbl, delta_dbl;
        int error;
 
+       srandomdev();
+
        for (int i = 0; i < 10; i++) {
-               GENRAND(&a_s64q);
-               GENRAND(&b_s64q);
+               GENRAND(&a_s64q, INT64_MIN, UINT64_MAX);
+               GENRAND(&b_s64q, INT64_MIN, UINT64_MAX);
                /*
                 * XXXLAS: Until Qmath handles precision normalisation, only
                 * test with equal precision.
@@ -391,9 +418,11 @@ ATF_TC_BODY(qfraci_s64q, tc)
        int64_t a_int, b_int;
        int error;
 
+       srandomdev();
+
        for (int i = 0; i < 10;) {
-               GENRAND(&a_s64q);
-               GENRAND(&b_s64q);
+               GENRAND(&a_s64q, INT64_MIN, UINT64_MAX);
+               GENRAND(&b_s64q, INT64_MIN, UINT64_MAX);
                /*
                 * XXXLAS: Until Qmath handles precision normalisation, only
                 * test with equal precision.
@@ -436,9 +465,11 @@ ATF_TC_BODY(qmuli_s64q, tc)
        int64_t a_int, b_int;
        int error;
 
+       srandomdev();
+
        for (int i = 0; i < 10;) {
-               GENRAND(&a_s64q);
-               GENRAND(&b_s64q);
+               GENRAND(&a_s64q, INT64_MIN, UINT64_MAX);
+               GENRAND(&b_s64q, INT64_MIN, UINT64_MAX);
                /*
                 * XXXLAS: Until Qmath handles precision normalisation, only
                 * test with equal precision.
@@ -481,9 +512,11 @@ ATF_TC_BODY(qaddi_s64q, tc)
        int64_t a_int, b_int;
        int error;
 
+       srandomdev();
+
        for (int i = 0; i < 10;) {
-               GENRAND(&a_s64q);
-               GENRAND(&b_s64q);
+               GENRAND(&a_s64q, INT64_MIN, UINT64_MAX);
+               GENRAND(&b_s64q, INT64_MIN, UINT64_MAX);
                /*
                 * XXXLAS: Until Qmath handles precision normalisation, only
                 * test with equal precision.
@@ -530,9 +563,11 @@ ATF_TC_BODY(qsubi_s64q, tc)
        int64_t a_int, b_int;
        int error;
 
+       srandomdev();
+
        for (int i = 0; i < 10; i++) {
-               GENRAND(&a_s64q);
-               GENRAND(&b_s64q);
+               GENRAND(&a_s64q, INT64_MIN, UINT64_MAX);
+               GENRAND(&b_s64q, INT64_MIN, UINT64_MAX);
                /*
                 * XXXLAS: Until Qmath handles precision normalisation, only
                 * test with equal precision.
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to