diff BurnBitArray.cpp @ 76:8136057988bc

Fixes to automatic report generating system. A lot of new unittests.
author Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
date Sat, 16 Feb 2013 15:32:20 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BurnBitArray.cpp	Sat Feb 16 15:32:20 2013 +0100
@@ -0,0 +1,198 @@
+#include "TestFramework.hpp"
+
+#include "BitDecoder.hpp"
+
+#define BURN_MAX 100000
+#define BURN for(size_t burn_counter = BURN_MAX; burn_counter > 0; --burn_counter)
+
+BOOST_AUTO_TEST_CASE( TestBasic )
+{
+  BURN {
+    BitArray tbits(16, true);
+    BitArray fbits(16, false);
+    for (uint i = 0; i < tbits.size(); ++i) {
+      BOOST_REQUIRE_EQUAL(tbits.testBit(i), true);
+      BOOST_REQUIRE_EQUAL(fbits.testBit(i), false);
+    }
+  }
+
+  BURN {
+    BitArray tbits(9, true);
+    BitArray fbits(9, false);
+    for (uint i = 0; i < tbits.size(); ++i) {
+      BOOST_REQUIRE_EQUAL(tbits.testBit(i), true);
+      BOOST_REQUIRE_EQUAL(fbits.testBit(i), false);
+    }
+  }
+
+  BURN {
+    BitArray tbits(13, true);
+    BitArray fbits(13, false);
+    for (uint i = 0; i < tbits.size(); ++i) {
+      BOOST_REQUIRE_EQUAL(tbits.testBit(i), true);
+      BOOST_REQUIRE_EQUAL(fbits.testBit(i), false);
+    }
+  }
+
+}
+
+
+BOOST_AUTO_TEST_CASE( TestSetBit )
+{
+
+  BURN {
+    for (uint i = 0; i < 13; ++i) {
+      BitArray tbits(13, true);
+      BitArray fbits(13, false);
+      tbits.setBit(i, false);
+      fbits.setBit(i, true);
+      for (uint j = 0; j < tbits.size(); ++j) {
+	BOOST_REQUIRE_EQUAL(tbits.testBit(j), i != j);
+	BOOST_REQUIRE_EQUAL(fbits.testBit(j), i == j);
+      }
+    }
+  }
+
+}
+
+BOOST_AUTO_TEST_CASE( TestSetBit2 )
+{
+  BURN {
+  BitArray tbits(8, true);
+  BitArray fbits(8, false);
+  BOOST_REQUIRE_EQUAL(tbits, BitDecoder::bitsFromString("11111111"));
+  BOOST_REQUIRE_EQUAL(fbits, BitDecoder::bitsFromString("00000000"));
+
+  tbits.setBit(0, false);
+  fbits.setBit(0, false);
+  BOOST_REQUIRE_EQUAL(tbits, BitDecoder::bitsFromString("01111111"));
+  BOOST_REQUIRE_EQUAL(fbits, BitDecoder::bitsFromString("00000000"));
+
+  tbits.setBit(1, true);
+  fbits.setBit(1, true);
+  BOOST_REQUIRE_EQUAL(tbits, BitDecoder::bitsFromString("01111111"));
+  BOOST_REQUIRE_EQUAL(fbits, BitDecoder::bitsFromString("01000000"));
+
+  tbits.setBit(2, false);
+  fbits.setBit(2, false);
+  BOOST_REQUIRE_EQUAL(tbits, BitDecoder::bitsFromString("01011111"));
+  BOOST_REQUIRE_EQUAL(fbits, BitDecoder::bitsFromString("01000000"));
+
+  tbits.setBit(3, false);
+  fbits.setBit(3, false);
+  BOOST_REQUIRE_EQUAL(tbits, BitDecoder::bitsFromString("01001111"));
+  BOOST_REQUIRE_EQUAL(fbits, BitDecoder::bitsFromString("01000000"));
+
+  tbits.setBit(4, false);
+  fbits.setBit(4, false);
+  BOOST_REQUIRE_EQUAL(tbits, BitDecoder::bitsFromString("01000111"));
+  BOOST_REQUIRE_EQUAL(fbits, BitDecoder::bitsFromString("01000000"));
+
+  tbits.setBit(5, true);
+  fbits.setBit(5, true);
+  BOOST_REQUIRE_EQUAL(tbits, BitDecoder::bitsFromString("01000111"));
+  BOOST_REQUIRE_EQUAL(fbits, BitDecoder::bitsFromString("01000100"));
+
+  tbits.setBit(6, true);
+  fbits.setBit(6, true);
+  BOOST_REQUIRE_EQUAL(tbits, BitDecoder::bitsFromString("01000111"));
+  BOOST_REQUIRE_EQUAL(fbits, BitDecoder::bitsFromString("01000110"));
+
+  tbits.setBit(7, false);
+  fbits.setBit(7, false);
+  BOOST_REQUIRE_EQUAL(tbits, BitDecoder::bitsFromString("01000110"));
+  BOOST_REQUIRE_EQUAL(fbits, BitDecoder::bitsFromString("01000110"));
+
+  }
+}
+
+BOOST_AUTO_TEST_CASE( TestPaddedChar )
+{
+  BURN {
+  BitArray bits = BitDecoder::bitsFromString("0100011011");
+
+  BOOST_REQUIRE_EQUAL(bits.size(), 10u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(0), 70);
+
+  bits = BitDecoder::bitsFromString("0000000001");
+  BOOST_REQUIRE_EQUAL(bits.size(), 10u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(2), 1u);
+
+  bits = BitDecoder::bitsFromString("0000000011");
+  BOOST_REQUIRE_EQUAL(bits.size(), 10u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(2), 3u);
+
+  bits = BitDecoder::bitsFromString("000000000011");
+  BOOST_REQUIRE_EQUAL(bits.size(), 12u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(4), 3u);
+
+  bits = BitDecoder::bitsFromString("0000000000011");
+  BOOST_REQUIRE_EQUAL(bits.size(), 13u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(5), 3u);
+
+  bits = BitDecoder::bitsFromString("00000000000011");
+  BOOST_REQUIRE_EQUAL(bits.size(), 14u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(6), 3u);
+
+  bits = BitDecoder::bitsFromString("000000000000011");
+  BOOST_REQUIRE_EQUAL(bits.size(), 15u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(7), 3u);
+
+  bits = BitDecoder::bitsFromString("10000001");
+  BOOST_REQUIRE_EQUAL(bits.size(), 8u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(0), 129u);
+
+  bits = BitDecoder::bitsFromString("010000001");
+  BOOST_REQUIRE_EQUAL(bits.size(), 9u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(1), 129u);
+
+  bits = BitDecoder::bitsFromString("0010000001");
+  BOOST_REQUIRE_EQUAL(bits.size(), 10u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(2), 129u);
+
+  bits = BitDecoder::bitsFromString("00010000001");
+  BOOST_REQUIRE_EQUAL(bits.size(), 11u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(3), 129u);
+
+  bits = BitDecoder::bitsFromString("000010000001");
+  BOOST_REQUIRE_EQUAL(bits.size(), 12u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(4), 129u);
+
+  bits = BitDecoder::bitsFromString("0000010000001");
+  BOOST_REQUIRE_EQUAL(bits.size(), 13u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(5), 129u);
+
+  bits = BitDecoder::bitsFromString("00000010000001");
+  BOOST_REQUIRE_EQUAL(bits.size(), 14u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(6), 129u);
+
+  bits = BitDecoder::bitsFromString("000000010000001");
+  BOOST_REQUIRE_EQUAL(bits.size(), 15u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(7), 129u);
+
+
+  bits = BitDecoder::bitsFromString("0100011011");
+  BOOST_REQUIRE_EQUAL(bits.size(), 10u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(2), 27u);
+  }
+}
+
+BOOST_AUTO_TEST_CASE( TestCorrectChar )
+{
+  BURN {
+  BitArray bits = BitDecoder::bitsFromString("00000001");
+  BOOST_REQUIRE_EQUAL(bits.size(), 8u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(0), 1u);
+
+  bits = BitDecoder::bitsFromString("00000011");
+  BOOST_REQUIRE_EQUAL(bits.size(), 8u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(0), 3u);
+
+  bits = BitDecoder::bitsFromString("10000000");
+  BOOST_REQUIRE_EQUAL(bits.size(), 8u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(0), 128u);
+  bits = BitDecoder::bitsFromString("11000000");
+  BOOST_REQUIRE_EQUAL(bits.size(), 8u);
+  BOOST_REQUIRE_EQUAL(bits.getPaddedChar(0), 192u);
+  }
+}