[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