Whamcloud - gitweb
libext2fs: fix offset code in undo_write_tdb
[tools/e2fsprogs.git] / lib / ext2fs / tst_bitops.c
index a0fb261..ed71447 100644 (file)
@@ -2,13 +2,14 @@
  * This testing program makes sure the bitops functions work
  *
  * Copyright (C) 2001 by Theodore Ts'o.
- * 
+ *
  * %Begin-Header%
- * This file may be redistributed under the terms of the GNU Public
- * License.
+ * This file may be redistributed under the terms of the GNU Library
+ * General Public License, version 2.
  * %End-Header%
  */
 
+#include "config.h"
 #include <stdio.h>
 #include <string.h>
 #if HAVE_UNISTD_H
@@ -38,7 +39,7 @@ int bits_list[] = {
 #define BIG_TEST_BIT   (((unsigned) 1 << 31) + 42)
 
 
-main(int argc, char **argv)
+int main(int argc, char **argv)
 {
        int     i, j, size;
        unsigned char testarray[12];
@@ -97,7 +98,7 @@ main(int argc, char **argv)
                }
        }
        printf("ext2fs_clear_bit test succeed.\n");
-               
+
 
        /* Do bigarray test */
        bigarray = malloc(1 << 29);
@@ -115,9 +116,9 @@ main(int argc, char **argv)
                exit(1);
 
        ext2fs_clear_bit(BIG_TEST_BIT, bigarray);
-       
+
        printf("big bit number (%u) test: %d, expected 0\n", BIG_TEST_BIT,
-              bigarray[BIG_TEST_BIT >> 3], 0);
+              bigarray[BIG_TEST_BIT >> 3]);
        if (bigarray[BIG_TEST_BIT >> 3] != 0)
                exit(1);
 
@@ -150,7 +151,7 @@ main(int argc, char **argv)
                }
        }
        printf("ext2fs_clear_bit test succeed.\n");
-               
+
 
         bigarray[BIG_TEST_BIT >> 3] = 0;
 
@@ -161,13 +162,133 @@ main(int argc, char **argv)
                exit(1);
 
        ext2fs_fast_clear_bit(BIG_TEST_BIT, bigarray);
-       
+
        printf("big bit number (%u) test: %d, expected 0\n", BIG_TEST_BIT,
-              bigarray[BIG_TEST_BIT >> 3], 0);
+              bigarray[BIG_TEST_BIT >> 3]);
        if (bigarray[BIG_TEST_BIT >> 3] != 0)
                exit(1);
 
        printf("ext2fs_fast_set_bit big_test successful\n");
 
+       /* Repeat foregoing tests for 64-bit bitops */
+
+       /* Test test_bit */
+       for (i=0,j=0; i < size; i++) {
+               if (ext2fs_test_bit64(i, bitarray)) {
+                       if (bits_list[j] == i) {
+                               j++;
+                       } else {
+                               printf("64-bit: Bit %d set, not expected\n",
+                                      i);
+                               exit(1);
+                       }
+               } else {
+                       if (bits_list[j] == i) {
+                               printf("64-bit: "
+                                      "Expected bit %d to be clear.\n", i);
+                               exit(1);
+                       }
+               }
+       }
+       printf("64-bit: ext2fs_test_bit appears to be correct\n");
+
+       /* Test ext2fs_set_bit */
+       memset(testarray, 0, sizeof(testarray));
+       for (i=0; bits_list[i] > 0; i++) {
+               ext2fs_set_bit64(bits_list[i], testarray);
+       }
+       if (memcmp(testarray, bitarray, sizeof(testarray)) == 0) {
+               printf("64-bit: ext2fs_set_bit test succeeded.\n");
+       } else {
+               printf("64-bit: ext2fs_set_bit test failed.\n");
+               for (i=0; i < sizeof(testarray); i++) {
+                       printf("%02x ", testarray[i]);
+               }
+               printf("\n");
+               exit(1);
+       }
+       for (i=0; bits_list[i] > 0; i++) {
+               ext2fs_clear_bit64(bits_list[i], testarray);
+       }
+       for (i=0; i < sizeof(testarray); i++) {
+               if (testarray[i]) {
+                       printf("64-bit: ext2fs_clear_bit failed, "
+                              "testarray[%d] is %d\n", i, testarray[i]);
+                       exit(1);
+               }
+       }
+       printf("64-bit: ext2fs_clear_bit test succeed.\n");
+
+       /* Do bigarray test */
+       bigarray = malloc(1 << 29);
+       if (!bigarray) {
+               fprintf(stderr, "Failed to allocate scratch memory!\n");
+               exit(1);
+       }
+
+        bigarray[BIG_TEST_BIT >> 3] = 0;
+
+       ext2fs_set_bit64(BIG_TEST_BIT, bigarray);
+       printf("64-bit: big bit number (%u) test: %d, expected %d\n",
+              BIG_TEST_BIT, bigarray[BIG_TEST_BIT >> 3],
+              (1 << (BIG_TEST_BIT & 7)));
+       if (bigarray[BIG_TEST_BIT >> 3] != (1 << (BIG_TEST_BIT & 7)))
+               exit(1);
+
+       ext2fs_clear_bit64(BIG_TEST_BIT, bigarray);
+
+       printf("64-bit: big bit number (%u) test: %d, expected 0\n",
+              BIG_TEST_BIT,
+              bigarray[BIG_TEST_BIT >> 3]);
+       if (bigarray[BIG_TEST_BIT >> 3] != 0)
+               exit(1);
+
+       printf("64-bit: ext2fs_set_bit big_test successful\n");
+
+       /* Now test ext2fs_fast_set_bit */
+       memset(testarray, 0, sizeof(testarray));
+       for (i=0; bits_list[i] > 0; i++) {
+               ext2fs_fast_set_bit64(bits_list[i], testarray);
+       }
+       if (memcmp(testarray, bitarray, sizeof(testarray)) == 0) {
+               printf("64-bit: ext2fs_fast_set_bit test succeeded.\n");
+       } else {
+               printf("64-bit: ext2fs_fast_set_bit test failed.\n");
+               for (i=0; i < sizeof(testarray); i++) {
+                       printf("%02x ", testarray[i]);
+               }
+               printf("\n");
+               exit(1);
+       }
+       for (i=0; bits_list[i] > 0; i++) {
+               ext2fs_clear_bit64(bits_list[i], testarray);
+       }
+       for (i=0; i < sizeof(testarray); i++) {
+               if (testarray[i]) {
+                       printf("64-bit: ext2fs_clear_bit failed, "
+                              "testarray[%d] is %d\n", i, testarray[i]);
+                       exit(1);
+               }
+       }
+       printf("64-bit: ext2fs_clear_bit test succeed.\n");
+
+        bigarray[BIG_TEST_BIT >> 3] = 0;
+
+       ext2fs_fast_set_bit64(BIG_TEST_BIT, bigarray);
+       printf("64-bit: big bit number (%u) test: %d, expected %d\n",
+              BIG_TEST_BIT, bigarray[BIG_TEST_BIT >> 3],
+              (1 << (BIG_TEST_BIT & 7)));
+       if (bigarray[BIG_TEST_BIT >> 3] != (1 << (BIG_TEST_BIT & 7)))
+               exit(1);
+
+       ext2fs_fast_clear_bit64(BIG_TEST_BIT, bigarray);
+
+       printf("64-bit: big bit number (%u) test: %d, expected 0\n",
+              BIG_TEST_BIT, bigarray[BIG_TEST_BIT >> 3]);
+       if (bigarray[BIG_TEST_BIT >> 3] != 0)
+               exit(1);
+
+       printf("64-bit: ext2fs_fast_set_bit big_test successful\n");
+
        exit(0);
 }