Putting Xs into squares is all the rage with statisticians. We should
authorflorian <florian@openbsd.org>
Fri, 23 Aug 2024 17:19:16 +0000 (17:19 +0000)
committerflorian <florian@openbsd.org>
Fri, 23 Aug 2024 17:19:16 +0000 (17:19 +0000)
test that they can use bitstring macros for that.

with & OK deraadt
OK bluhm

regress/include/bitstring/bitstring_test.c
regress/include/bitstring/good/27
regress/include/bitstring/good/32
regress/include/bitstring/good/49
regress/include/bitstring/good/64
regress/include/bitstring/good/67
regress/include/bitstring/good/8

index 545a3cb..836c021 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: bitstring_test.c,v 1.5 2003/07/31 21:48:02 deraadt Exp $   */
+/* $OpenBSD: bitstring_test.c,v 1.6 2024/08/23 17:19:16 florian Exp $   */
 /* $NetBSD: bitstring_test.c,v 1.4 1995/04/29 05:44:35 cgd Exp $        */
 
 /*
@@ -210,6 +210,16 @@ main(int argc, char *argv[])
                printbits(bs, TEST_LENGTH);
        }
 
+       (void) printf("\n");
+       (void) printf("CHI square test\n");
+       for (i = 0; i < TEST_LENGTH; i++) {
+               bit_nclear(bs, 0, TEST_LENGTH - 1);
+               bit_nset(bs, i, i);
+               bit_nset(bs, TEST_LENGTH - 1 - i, TEST_LENGTH - 1 - i);
+               (void) printf("%3d ", i);
+               printbits(bs, TEST_LENGTH);
+       }
+
        (void) free(bs);
        (void) exit(0);
 }
index 55ba39e..f1479dd 100644 (file)
@@ -261,3 +261,32 @@ first 1 bit should move left 1 position each line
  24   0  24 000000000000000000000000100
  25   0  25 000000000000000000000000010
  26   0  26 000000000000000000000000001
+
+CHI square test
+  0   1   0 100000000000000000000000001
+  1   0   1 010000000000000000000000010
+  2   0   2 001000000000000000000000100
+  3   0   3 000100000000000000000001000
+  4   0   4 000010000000000000000010000
+  5   0   5 000001000000000000000100000
+  6   0   6 000000100000000000001000000
+  7   0   7 000000010000000000010000000
+  8   0   8 000000001000000000100000000
+  9   0   9 000000000100000001000000000
+ 10   0  10 000000000010000010000000000
+ 11   0  11 000000000001000100000000000
+ 12   0  12 000000000000101000000000000
+ 13   0  13 000000000000010000000000000
+ 14   0  12 000000000000101000000000000
+ 15   0  11 000000000001000100000000000
+ 16   0  10 000000000010000010000000000
+ 17   0   9 000000000100000001000000000
+ 18   0   8 000000001000000000100000000
+ 19   0   7 000000010000000000010000000
+ 20   0   6 000000100000000000001000000
+ 21   0   5 000001000000000000000100000
+ 22   0   4 000010000000000000000010000
+ 23   0   3 000100000000000000000001000
+ 24   0   2 001000000000000000000000100
+ 25   0   1 010000000000000000000000010
+ 26   1   0 100000000000000000000000001
index 2e1ca55..7474b96 100644 (file)
@@ -301,3 +301,37 @@ first 1 bit should move left 1 position each line
  29   0  29 00000000000000000000000000000100
  30   0  30 00000000000000000000000000000010
  31   0  31 00000000000000000000000000000001
+
+CHI square test
+  0   1   0 10000000000000000000000000000001
+  1   0   1 01000000000000000000000000000010
+  2   0   2 00100000000000000000000000000100
+  3   0   3 00010000000000000000000000001000
+  4   0   4 00001000000000000000000000010000
+  5   0   5 00000100000000000000000000100000
+  6   0   6 00000010000000000000000001000000
+  7   0   7 00000001000000000000000010000000
+  8   0   8 00000000100000000000000100000000
+  9   0   9 00000000010000000000001000000000
+ 10   0  10 00000000001000000000010000000000
+ 11   0  11 00000000000100000000100000000000
+ 12   0  12 00000000000010000001000000000000
+ 13   0  13 00000000000001000010000000000000
+ 14   0  14 00000000000000100100000000000000
+ 15   0  15 00000000000000011000000000000000
+ 16   0  15 00000000000000011000000000000000
+ 17   0  14 00000000000000100100000000000000
+ 18   0  13 00000000000001000010000000000000
+ 19   0  12 00000000000010000001000000000000
+ 20   0  11 00000000000100000000100000000000
+ 21   0  10 00000000001000000000010000000000
+ 22   0   9 00000000010000000000001000000000
+ 23   0   8 00000000100000000000000100000000
+ 24   0   7 00000001000000000000000010000000
+ 25   0   6 00000010000000000000000001000000
+ 26   0   5 00000100000000000000000000100000
+ 27   0   4 00001000000000000000000000010000
+ 28   0   3 00010000000000000000000000001000
+ 29   0   2 00100000000000000000000000000100
+ 30   0   1 01000000000000000000000000000010
+ 31   1   0 10000000000000000000000000000001
index d63c069..42e55b3 100644 (file)
@@ -437,3 +437,54 @@ first 1 bit should move left 1 position each line
  46   0  46 0000000000000000000000000000000000000000000000100
  47   0  47 0000000000000000000000000000000000000000000000010
  48   0  48 0000000000000000000000000000000000000000000000001
+
+CHI square test
+  0   1   0 1000000000000000000000000000000000000000000000001
+  1   0   1 0100000000000000000000000000000000000000000000010
+  2   0   2 0010000000000000000000000000000000000000000000100
+  3   0   3 0001000000000000000000000000000000000000000001000
+  4   0   4 0000100000000000000000000000000000000000000010000
+  5   0   5 0000010000000000000000000000000000000000000100000
+  6   0   6 0000001000000000000000000000000000000000001000000
+  7   0   7 0000000100000000000000000000000000000000010000000
+  8   0   8 0000000010000000000000000000000000000000100000000
+  9   0   9 0000000001000000000000000000000000000001000000000
+ 10   0  10 0000000000100000000000000000000000000010000000000
+ 11   0  11 0000000000010000000000000000000000000100000000000
+ 12   0  12 0000000000001000000000000000000000001000000000000
+ 13   0  13 0000000000000100000000000000000000010000000000000
+ 14   0  14 0000000000000010000000000000000000100000000000000
+ 15   0  15 0000000000000001000000000000000001000000000000000
+ 16   0  16 0000000000000000100000000000000010000000000000000
+ 17   0  17 0000000000000000010000000000000100000000000000000
+ 18   0  18 0000000000000000001000000000001000000000000000000
+ 19   0  19 0000000000000000000100000000010000000000000000000
+ 20   0  20 0000000000000000000010000000100000000000000000000
+ 21   0  21 0000000000000000000001000001000000000000000000000
+ 22   0  22 0000000000000000000000100010000000000000000000000
+ 23   0  23 0000000000000000000000010100000000000000000000000
+ 24   0  24 0000000000000000000000001000000000000000000000000
+ 25   0  23 0000000000000000000000010100000000000000000000000
+ 26   0  22 0000000000000000000000100010000000000000000000000
+ 27   0  21 0000000000000000000001000001000000000000000000000
+ 28   0  20 0000000000000000000010000000100000000000000000000
+ 29   0  19 0000000000000000000100000000010000000000000000000
+ 30   0  18 0000000000000000001000000000001000000000000000000
+ 31   0  17 0000000000000000010000000000000100000000000000000
+ 32   0  16 0000000000000000100000000000000010000000000000000
+ 33   0  15 0000000000000001000000000000000001000000000000000
+ 34   0  14 0000000000000010000000000000000000100000000000000
+ 35   0  13 0000000000000100000000000000000000010000000000000
+ 36   0  12 0000000000001000000000000000000000001000000000000
+ 37   0  11 0000000000010000000000000000000000000100000000000
+ 38   0  10 0000000000100000000000000000000000000010000000000
+ 39   0   9 0000000001000000000000000000000000000001000000000
+ 40   0   8 0000000010000000000000000000000000000000100000000
+ 41   0   7 0000000100000000000000000000000000000000010000000
+ 42   0   6 0000001000000000000000000000000000000000001000000
+ 43   0   5 0000010000000000000000000000000000000000000100000
+ 44   0   4 0000100000000000000000000000000000000000000010000
+ 45   0   3 0001000000000000000000000000000000000000000001000
+ 46   0   2 0010000000000000000000000000000000000000000000100
+ 47   0   1 0100000000000000000000000000000000000000000000010
+ 48   1   0 1000000000000000000000000000000000000000000000001
index 7e9308e..deb94b6 100644 (file)
@@ -557,3 +557,69 @@ first 1 bit should move left 1 position each line
  61   0  61 0000000000000000000000000000000000000000000000000000000000000100
  62   0  62 0000000000000000000000000000000000000000000000000000000000000010
  63   0  63 0000000000000000000000000000000000000000000000000000000000000001
+
+CHI square test
+  0   1   0 1000000000000000000000000000000000000000000000000000000000000001
+  1   0   1 0100000000000000000000000000000000000000000000000000000000000010
+  2   0   2 0010000000000000000000000000000000000000000000000000000000000100
+  3   0   3 0001000000000000000000000000000000000000000000000000000000001000
+  4   0   4 0000100000000000000000000000000000000000000000000000000000010000
+  5   0   5 0000010000000000000000000000000000000000000000000000000000100000
+  6   0   6 0000001000000000000000000000000000000000000000000000000001000000
+  7   0   7 0000000100000000000000000000000000000000000000000000000010000000
+  8   0   8 0000000010000000000000000000000000000000000000000000000100000000
+  9   0   9 0000000001000000000000000000000000000000000000000000001000000000
+ 10   0  10 0000000000100000000000000000000000000000000000000000010000000000
+ 11   0  11 0000000000010000000000000000000000000000000000000000100000000000
+ 12   0  12 0000000000001000000000000000000000000000000000000001000000000000
+ 13   0  13 0000000000000100000000000000000000000000000000000010000000000000
+ 14   0  14 0000000000000010000000000000000000000000000000000100000000000000
+ 15   0  15 0000000000000001000000000000000000000000000000001000000000000000
+ 16   0  16 0000000000000000100000000000000000000000000000010000000000000000
+ 17   0  17 0000000000000000010000000000000000000000000000100000000000000000
+ 18   0  18 0000000000000000001000000000000000000000000001000000000000000000
+ 19   0  19 0000000000000000000100000000000000000000000010000000000000000000
+ 20   0  20 0000000000000000000010000000000000000000000100000000000000000000
+ 21   0  21 0000000000000000000001000000000000000000001000000000000000000000
+ 22   0  22 0000000000000000000000100000000000000000010000000000000000000000
+ 23   0  23 0000000000000000000000010000000000000000100000000000000000000000
+ 24   0  24 0000000000000000000000001000000000000001000000000000000000000000
+ 25   0  25 0000000000000000000000000100000000000010000000000000000000000000
+ 26   0  26 0000000000000000000000000010000000000100000000000000000000000000
+ 27   0  27 0000000000000000000000000001000000001000000000000000000000000000
+ 28   0  28 0000000000000000000000000000100000010000000000000000000000000000
+ 29   0  29 0000000000000000000000000000010000100000000000000000000000000000
+ 30   0  30 0000000000000000000000000000001001000000000000000000000000000000
+ 31   0  31 0000000000000000000000000000000110000000000000000000000000000000
+ 32   0  31 0000000000000000000000000000000110000000000000000000000000000000
+ 33   0  30 0000000000000000000000000000001001000000000000000000000000000000
+ 34   0  29 0000000000000000000000000000010000100000000000000000000000000000
+ 35   0  28 0000000000000000000000000000100000010000000000000000000000000000
+ 36   0  27 0000000000000000000000000001000000001000000000000000000000000000
+ 37   0  26 0000000000000000000000000010000000000100000000000000000000000000
+ 38   0  25 0000000000000000000000000100000000000010000000000000000000000000
+ 39   0  24 0000000000000000000000001000000000000001000000000000000000000000
+ 40   0  23 0000000000000000000000010000000000000000100000000000000000000000
+ 41   0  22 0000000000000000000000100000000000000000010000000000000000000000
+ 42   0  21 0000000000000000000001000000000000000000001000000000000000000000
+ 43   0  20 0000000000000000000010000000000000000000000100000000000000000000
+ 44   0  19 0000000000000000000100000000000000000000000010000000000000000000
+ 45   0  18 0000000000000000001000000000000000000000000001000000000000000000
+ 46   0  17 0000000000000000010000000000000000000000000000100000000000000000
+ 47   0  16 0000000000000000100000000000000000000000000000010000000000000000
+ 48   0  15 0000000000000001000000000000000000000000000000001000000000000000
+ 49   0  14 0000000000000010000000000000000000000000000000000100000000000000
+ 50   0  13 0000000000000100000000000000000000000000000000000010000000000000
+ 51   0  12 0000000000001000000000000000000000000000000000000001000000000000
+ 52   0  11 0000000000010000000000000000000000000000000000000000100000000000
+ 53   0  10 0000000000100000000000000000000000000000000000000000010000000000
+ 54   0   9 0000000001000000000000000000000000000000000000000000001000000000
+ 55   0   8 0000000010000000000000000000000000000000000000000000000100000000
+ 56   0   7 0000000100000000000000000000000000000000000000000000000010000000
+ 57   0   6 0000001000000000000000000000000000000000000000000000000001000000
+ 58   0   5 0000010000000000000000000000000000000000000000000000000000100000
+ 59   0   4 0000100000000000000000000000000000000000000000000000000000010000
+ 60   0   3 0001000000000000000000000000000000000000000000000000000000001000
+ 61   0   2 0010000000000000000000000000000000000000000000000000000000000100
+ 62   0   1 0100000000000000000000000000000000000000000000000000000000000010
+ 63   1   0 1000000000000000000000000000000000000000000000000000000000000001
index e5decc3..83cd3fd 100644 (file)
@@ -581,3 +581,72 @@ first 1 bit should move left 1 position each line
  64   0  64 0000000000000000000000000000000000000000000000000000000000000000100
  65   0  65 0000000000000000000000000000000000000000000000000000000000000000010
  66   0  66 0000000000000000000000000000000000000000000000000000000000000000001
+
+CHI square test
+  0   1   0 1000000000000000000000000000000000000000000000000000000000000000001
+  1   0   1 0100000000000000000000000000000000000000000000000000000000000000010
+  2   0   2 0010000000000000000000000000000000000000000000000000000000000000100
+  3   0   3 0001000000000000000000000000000000000000000000000000000000000001000
+  4   0   4 0000100000000000000000000000000000000000000000000000000000000010000
+  5   0   5 0000010000000000000000000000000000000000000000000000000000000100000
+  6   0   6 0000001000000000000000000000000000000000000000000000000000001000000
+  7   0   7 0000000100000000000000000000000000000000000000000000000000010000000
+  8   0   8 0000000010000000000000000000000000000000000000000000000000100000000
+  9   0   9 0000000001000000000000000000000000000000000000000000000001000000000
+ 10   0  10 0000000000100000000000000000000000000000000000000000000010000000000
+ 11   0  11 0000000000010000000000000000000000000000000000000000000100000000000
+ 12   0  12 0000000000001000000000000000000000000000000000000000001000000000000
+ 13   0  13 0000000000000100000000000000000000000000000000000000010000000000000
+ 14   0  14 0000000000000010000000000000000000000000000000000000100000000000000
+ 15   0  15 0000000000000001000000000000000000000000000000000001000000000000000
+ 16   0  16 0000000000000000100000000000000000000000000000000010000000000000000
+ 17   0  17 0000000000000000010000000000000000000000000000000100000000000000000
+ 18   0  18 0000000000000000001000000000000000000000000000001000000000000000000
+ 19   0  19 0000000000000000000100000000000000000000000000010000000000000000000
+ 20   0  20 0000000000000000000010000000000000000000000000100000000000000000000
+ 21   0  21 0000000000000000000001000000000000000000000001000000000000000000000
+ 22   0  22 0000000000000000000000100000000000000000000010000000000000000000000
+ 23   0  23 0000000000000000000000010000000000000000000100000000000000000000000
+ 24   0  24 0000000000000000000000001000000000000000001000000000000000000000000
+ 25   0  25 0000000000000000000000000100000000000000010000000000000000000000000
+ 26   0  26 0000000000000000000000000010000000000000100000000000000000000000000
+ 27   0  27 0000000000000000000000000001000000000001000000000000000000000000000
+ 28   0  28 0000000000000000000000000000100000000010000000000000000000000000000
+ 29   0  29 0000000000000000000000000000010000000100000000000000000000000000000
+ 30   0  30 0000000000000000000000000000001000001000000000000000000000000000000
+ 31   0  31 0000000000000000000000000000000100010000000000000000000000000000000
+ 32   0  32 0000000000000000000000000000000010100000000000000000000000000000000
+ 33   0  33 0000000000000000000000000000000001000000000000000000000000000000000
+ 34   0  32 0000000000000000000000000000000010100000000000000000000000000000000
+ 35   0  31 0000000000000000000000000000000100010000000000000000000000000000000
+ 36   0  30 0000000000000000000000000000001000001000000000000000000000000000000
+ 37   0  29 0000000000000000000000000000010000000100000000000000000000000000000
+ 38   0  28 0000000000000000000000000000100000000010000000000000000000000000000
+ 39   0  27 0000000000000000000000000001000000000001000000000000000000000000000
+ 40   0  26 0000000000000000000000000010000000000000100000000000000000000000000
+ 41   0  25 0000000000000000000000000100000000000000010000000000000000000000000
+ 42   0  24 0000000000000000000000001000000000000000001000000000000000000000000
+ 43   0  23 0000000000000000000000010000000000000000000100000000000000000000000
+ 44   0  22 0000000000000000000000100000000000000000000010000000000000000000000
+ 45   0  21 0000000000000000000001000000000000000000000001000000000000000000000
+ 46   0  20 0000000000000000000010000000000000000000000000100000000000000000000
+ 47   0  19 0000000000000000000100000000000000000000000000010000000000000000000
+ 48   0  18 0000000000000000001000000000000000000000000000001000000000000000000
+ 49   0  17 0000000000000000010000000000000000000000000000000100000000000000000
+ 50   0  16 0000000000000000100000000000000000000000000000000010000000000000000
+ 51   0  15 0000000000000001000000000000000000000000000000000001000000000000000
+ 52   0  14 0000000000000010000000000000000000000000000000000000100000000000000
+ 53   0  13 0000000000000100000000000000000000000000000000000000010000000000000
+ 54   0  12 0000000000001000000000000000000000000000000000000000001000000000000
+ 55   0  11 0000000000010000000000000000000000000000000000000000000100000000000
+ 56   0  10 0000000000100000000000000000000000000000000000000000000010000000000
+ 57   0   9 0000000001000000000000000000000000000000000000000000000001000000000
+ 58   0   8 0000000010000000000000000000000000000000000000000000000000100000000
+ 59   0   7 0000000100000000000000000000000000000000000000000000000000010000000
+ 60   0   6 0000001000000000000000000000000000000000000000000000000000001000000
+ 61   0   5 0000010000000000000000000000000000000000000000000000000000000100000
+ 62   0   4 0000100000000000000000000000000000000000000000000000000000000010000
+ 63   0   3 0001000000000000000000000000000000000000000000000000000000000001000
+ 64   0   2 0010000000000000000000000000000000000000000000000000000000000000100
+ 65   0   1 0100000000000000000000000000000000000000000000000000000000000000010
+ 66   1   0 1000000000000000000000000000000000000000000000000000000000000000001
index aba6440..1def322 100644 (file)
@@ -109,3 +109,13 @@ first 1 bit should move left 1 position each line
   5   0   5 00000100
   6   0   6 00000010
   7   0   7 00000001
+
+CHI square test
+  0   1   0 10000001
+  1   0   1 01000010
+  2   0   2 00100100
+  3   0   3 00011000
+  4   0   3 00011000
+  5   0   2 00100100
+  6   0   1 01000010
+  7   1   0 10000001