public void ByteBlockColumn_DefaultValue() { ByteBlock defaultValue = "..."; ByteBlockColumn set = new ByteBlockColumn(defaultValue); set.SetSize(3); // Verify values are initialized to default Assert.AreEqual(defaultValue, set[0]); Assert.AreEqual(defaultValue, set[1]); Assert.AreEqual(defaultValue, set[2]); // Verify a changed value is set and doesn't disturb other defaults ByteBlock anotherValue = "Hello"; set[1] = anotherValue; Assert.AreEqual(defaultValue, set[0]); Assert.AreEqual(anotherValue, set[1]); Assert.AreEqual(defaultValue, set[2]); // Verify shrink and re-expand resets values to default set.SetSize(0); set.SetSize(3); Assert.AreEqual(defaultValue, set[0]); Assert.AreEqual(defaultValue, set[1]); Assert.AreEqual(defaultValue, set[2]); }
public void ByteBlockColumn_PackingRules() { ByteBlockColumn set = new ByteBlockColumn(ByteBlock.Zero); Assert.AreEqual(0, set.Count); set.SetSize(3); // Append three values (should append to partial block) set[0] = "Hello"; set[1] = "There"; set[2] = "You"; // Verify they can be read back Assert.AreEqual("Hello", set[0].ToString()); Assert.AreEqual("There", set[1].ToString()); Assert.AreEqual("You", set[2].ToString()); // Change a value (should be in place) set[0] = "Now"; Assert.AreEqual("Now", set[0].ToString()); // Verify the unused suffix was cleared (security) ByteBlock b = set[0]; b.Index += b.Length; b.Length = 2; Assert.AreEqual("\0\0", b.ToString()); // Write larger values (should force a compaction) set[0] = "Hello."; set[1] = "There."; set[2] = "You."; // Verify they can be read back Assert.AreEqual("Hello.", set[0].ToString()); Assert.AreEqual("There.", set[1].ToString()); Assert.AreEqual("You.", set[2].ToString()); // Write an empty value, and then back set[1] = String.Empty; Assert.AreEqual(String.Empty, set[1].ToString()); set[1] = "Restored"; Assert.AreEqual("Restored", set[1].ToString()); // Write a null value set[2] = (string)null; Assert.AreEqual(String.Empty, set[2].ToString()); set[2] = "Placed back"; Assert.AreEqual("Placed back", set[2].ToString()); // Write a huge value byte[] huge = new byte[8192]; set[3] = huge; Assert.AreEqual(8192, set[3].Length); Assert.AreNotEqual(set[3].Array, set[2].Array, "Verify written to a separate array"); // Shrink the huge value set[3] = "Small Value"; Assert.AreEqual("Small Value", set[3].ToString()); }
public void ByteBlockColumn_RewriteValue() { ByteBlockColumn set = new ByteBlockColumn(ByteBlock.Zero); set.SetSize(3); // Set a value, and then set it to itself (should do nothing, but // clearing logic must know not to wipe out value). set[0] = "Hello"; set[0] = set[0]; Assert.AreEqual("Hello", set[0].ToString()); }