[Avida-SVN] r3306 - in development: Avida.xcodeproj source/targets/unit-tests

brysonda at myxo.css.msu.edu brysonda at myxo.css.msu.edu
Wed Jun 10 06:33:56 PDT 2009


Author: brysonda
Date: 2009-06-10 09:33:55 -0400 (Wed, 10 Jun 2009)
New Revision: 3306

Modified:
   development/Avida.xcodeproj/project.pbxproj
   development/source/targets/unit-tests/main.cc
Log:
Translate cBitArray unit tests into the unit test framework.

Modified: development/Avida.xcodeproj/project.pbxproj
===================================================================
--- development/Avida.xcodeproj/project.pbxproj	2009-06-10 03:18:14 UTC (rev 3305)
+++ development/Avida.xcodeproj/project.pbxproj	2009-06-10 13:33:55 UTC (rev 3306)
@@ -39,6 +39,7 @@
 		700D9C470F1A8F34002CC711 /* cModularityAnalysis.cc in Sources */ = {isa = PBXBuildFile; fileRef = 700D9C450F1A8F34002CC711 /* cModularityAnalysis.cc */; };
 		700E2996085A1F6000CF158A /* avida in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCC3164D07626CF3008F7A48 /* avida */; };
 		700E2B87085DE54400CF158A /* avida-viewer in CopyFiles */ = {isa = PBXBuildFile; fileRef = 700E2B83085DE50C00CF158A /* avida-viewer */; };
+		7020699C0FDFEB7900B77E39 /* cBitArray.cc in Sources */ = {isa = PBXBuildFile; fileRef = 7020828D0FB9F2DF00637AD6 /* cBitArray.cc */; };
 		7020828F0FB9F2DF00637AD6 /* cBitArray.cc in Sources */ = {isa = PBXBuildFile; fileRef = 7020828D0FB9F2DF00637AD6 /* cBitArray.cc */; };
 		702082900FB9F2DF00637AD6 /* cBitArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 7020828E0FB9F2DF00637AD6 /* cBitArray.h */; };
 		70211A5D0ECBD531004A293A /* cRCObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 70211A5B0ECBD531004A293A /* cRCObject.h */; };
@@ -2212,6 +2213,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				70B6514F0BEA6FCC002472ED /* main.cc in Sources */,
+				7020699C0FDFEB7900B77E39 /* cBitArray.cc in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};

Modified: development/source/targets/unit-tests/main.cc
===================================================================
--- development/source/targets/unit-tests/main.cc	2009-06-10 03:18:14 UTC (rev 3305)
+++ development/source/targets/unit-tests/main.cc	2009-06-10 13:33:55 UTC (rev 3306)
@@ -99,6 +99,251 @@
 
 
 
+#include "cBitArray.h"
+class cRawBitArrayTests : public cUnitTest
+{
+public:
+  const char* GetUnitName() { return "cRawBitArray"; }
+protected:
+  void RunTests()
+  {
+    int result = true;
+    
+    cRawBitArray bit_array1;
+    bit_array1.ResizeClear(10);
+    for (int i = 0; i < 10; i++) {
+      if (bit_array1.GetBit(i) != false) {
+        result = false;
+        break;
+      }
+    }
+    ReportTestResult("Default Constructor - ResizeClear", result);
+    
+
+    result = true;
+    
+    bit_array1.SetBit(1, true);
+    bit_array1.SetBit(3, true);
+    bit_array1.SetBit(5, true);
+    bit_array1.SetBit(7, true);
+    bit_array1.SetBit(9, true);
+    
+    for (int i = 0; i < 10; i++) {
+      bool bit_value = !(2*(i/2) == i);
+      if (bit_array1.GetBit(i) != bit_value) {
+        result = false;
+        break;
+      }
+    }
+    ReportTestResult("SetBit (round 1)", result);
+
+    
+    result = true;
+    
+    bit_array1.SetBit(0, true);
+    bit_array1.SetBit(1, false);
+    bit_array1.SetBit(5, false);
+    bit_array1.SetBit(6, true);
+    bit_array1.SetBit(7, false);
+    
+    for (int i = 0; i < 10; i++) {
+      bool bit_value = (3*(i/3) == i);
+      if (bit_array1.GetBit(i) != bit_value) {
+        result = false;
+        break;
+      }
+    }
+    ReportTestResult("SetBit (round 2)", result);
+    
+    // Test constructor with initial size < 32.
+    cRawBitArray bit_array2(26);
+    for (int i = 0; i < 26; i++) {
+      if (bit_array2.GetBit(i) != false) {
+        result = false;
+        break;
+      }
+    }
+    ReportTestResult("Constructor (size < 32)", result);
+    
+    
+    result = true;
+    
+    bit_array2.SetBit(8, true);
+    bit_array2.Copy(bit_array1, 10);
+    
+    for (int i = 0; i < 10; i++) {
+      bool bit_value = (3*(i/3) == i);
+      if (bit_array2.GetBit(i) != bit_value) {
+        result = false;
+        break;
+      }
+    }
+    ReportTestResult("Copy", result);
+    
+    
+    result = true;
+    
+    // Test constructor with initial size > 32.
+    const int high_bit_count = 1000;
+    cRawBitArray bit_array3(high_bit_count);
+    int bit_pos = 2;
+    while (bit_pos < high_bit_count) {
+      bit_array3.SetBit(bit_pos, true);
+      bit_pos = bit_pos * 3 / 2;
+    }
+    
+    
+    // Test faux copy constructor.
+    cRawBitArray bit_array4(bit_array3, high_bit_count);
+    bit_array4.SetBit(22, true);
+    bit_array4.SetBit(24, true);
+    int count1 =  bit_array3.CountBits(high_bit_count);
+    int count2 =  bit_array3.CountBits2(high_bit_count);
+    int count3 =  bit_array4.CountBits(high_bit_count);
+    int count4 =  bit_array4.CountBits2(high_bit_count);
+    ReportTestResult("CountBits vs. CountBits2", (count1 == count2 && count3 == count4));
+    ReportTestResult("CountBits - Post Copy", (count1 == (count3 - 2)));
+    
+    
+    int diff_count = 0;
+    for (int i = 0; i < high_bit_count; i++) {
+      if (bit_array3.GetBit(i) != bit_array4.GetBit(i)) diff_count++;
+    }
+    ReportTestResult("Copy Constructor", (diff_count == 2));
+    
+    
+    // LOGICAL OPERATORS
+    
+    bit_array4.Resize(1000, 70);
+    int count5 = bit_array4.CountBits(70);
+    bit_array4.NOT(70);
+    int count6 = bit_array4.CountBits(70);
+    bit_array4.NOT(70);
+    ReportTestResult("NOT Operation", (count5 + count6 == 70));
+    
+    
+    cRawBitArray bit_array5(70);
+    int pos = 1;
+    int step = 1;
+    while (pos <= 70) {
+      bit_array5.SetBit(70 - pos, true);
+      pos += step++;
+    }
+    
+    cRawBitArray bit_array6(70);
+    bit_array6.AND(bit_array4, bit_array5, 70);
+    int count_and = bit_array6.CountBits(70);
+    ReportTestResult("AND Operation", (count_and == 3));
+    
+    
+    bit_array6.OR(bit_array4, bit_array5, 70);
+    int count_or = bit_array6.CountBits(70);
+    ReportTestResult("OR Operation", (count_or == 21));
+    
+    
+    bit_array6.NAND(bit_array4, bit_array5, 70);
+    int count_nand = bit_array6.CountBits(70);
+    ReportTestResult("NAND Operation", (count_nand == 67));
+    
+    
+    bit_array6.NOR(bit_array4, bit_array5, 70);
+    int count_nor = bit_array6.CountBits(70);
+    ReportTestResult("NOR Operation", (count_nor == 49));
+    
+    
+    bit_array6.XOR(bit_array4, bit_array5, 70);
+    int count_xor = bit_array6.CountBits(70);
+    ReportTestResult("XOR Operation", (count_xor == 18));
+    
+    
+    bit_array6.EQU(bit_array4, bit_array5, 70);
+    int count_equ = bit_array6.CountBits(70);
+    ReportTestResult("EQU Operation", (count_equ == 52));
+    
+    
+    // LEFT AND RIGHT SHIFT
+    
+    cRawBitArray bit_array7(32);
+    bit_array7.SetBit(0, true);
+    
+    bit_array7.SHIFT(32, 0);
+    ReportTestResult("Shift 0", (bit_array7.GetBit(0) && bit_array7.CountBits(32) == 1));
+    
+    
+    bit_array7.SHIFT(32, 31);
+    ReportTestResult("Shift Left", (bit_array7.GetBit(31) && bit_array7.CountBits(32) == 1));
+    
+    
+    bit_array7.SHIFT(32, -31);
+    ReportTestResult("Shift Right (sign bit)", (bit_array7.GetBit(0) || bit_array7.CountBits(32) == 1));
+    
+    
+    bit_array7.SHIFT(32, 30);
+    bit_array7.SHIFT(32, -30);
+    ReportTestResult("Shift Right (no sign bit)", (bit_array7.GetBit(0) && bit_array7.CountBits(32) == 1));
+    
+    
+    bit_array7.SHIFT(32, 32);
+    ReportTestResult("Shift Left Overflow", (bit_array7.CountBits(32) == 0));
+    
+    
+    bit_array7.SetBit(31, true);
+    bit_array7.SHIFT(32, -32);
+    ReportTestResult("Shift Right Overflow", (bit_array7.CountBits(32) == 0));
+    
+    
+    cRawBitArray bit_array8(34);
+    bit_array8.SetBit(0, true);
+    
+    bit_array8.SHIFT(34, 33);
+    ReportTestResult("Shift Left (across bit fields)", (bit_array8.GetBit(33) && bit_array8.CountBits(34) == 1));
+    
+    
+    bit_array8.SHIFT(34, -33);
+    ReportTestResult("Shift Right (across bit fields)", (bit_array8.GetBit(0) && bit_array8.CountBits(34) == 1));
+    
+    
+    cRawBitArray bit_array9(66);
+    bit_array9.SetBit(0, true);
+    bit_array9.SetBit(32, true);
+    
+    bit_array9.SHIFT(66, 65);
+    ReportTestResult("Shift Left (multiple bit fields)", (bit_array9.GetBit(65) && bit_array9.CountBits(66) == 1));
+    
+    
+    bit_array9.SHIFT(66, -65);
+    ReportTestResult("Shift Right (multiple bit fields)", (bit_array9.GetBit(0) && bit_array9.CountBits(66) == 1));
+  }
+};
+
+class cBitArrayTests : public cUnitTest
+{
+public:
+  const char* GetUnitName() { return "cBitArray"; }
+protected:
+  void RunTests()
+  {
+    cBitArray ba(74);
+    for (int i = 0; i < 74; i++) if (i % 5 == 3) ba[i] = true;
+    
+    cBitArray ba2(74);
+    for (int i = 0; i < 74; i++) {
+      if ((i % 2 == 0 || i % 3 == 0) && i % 6 != 0) ba2[i] = true;
+    }
+    
+    ReportTestResult("operator&", ((ba & ba2).CountBits() == 8));
+    ReportTestResult("operator|", ((ba | ba2).CountBits() == 43));
+    ReportTestResult("operator^", ((ba ^ ba2).CountBits() == 35));
+    ReportTestResult("operator~", ((~ba).CountBits() == 59));
+    ReportTestResult("operator<<", ((ba << 65).CountBits() == 2));
+    ReportTestResult("operator>>", ((ba >> 65).CountBits() == 2));
+    ReportTestResult("Chained Bitwise Operations", ((~ba & ~ba2).CountBits() == 31));
+  }
+};
+
+
+
+
 #define TEST(CLASS) \
 tester = new CLASS ## Tests(); \
 tester->Execute(); \
@@ -117,6 +362,8 @@
   cout << endl;
   
   TEST(tArray);
+  TEST(cRawBitArray);
+  TEST(cBitArray);
   
   if (failed == 0)
     cout << "All unit tests passed." << endl;
@@ -147,7 +394,7 @@
   
   size_t l = strlen(test_name);
   char* str = new char[l + 3];
-  str = strncpy(str, test_name, l);
+  str = strncpy(str, test_name, l + 1);
   str = strncat(str, ": ", 2);
   
   cout << setw(74) << left << str;
@@ -157,5 +404,7 @@
     cout << "failed";
     m_failed++;
   }
-  cout << endl;  
+  cout << endl;
+  
+  delete str;
 }




More information about the Avida-cvs mailing list