public void T06_RecordKeyDelimiterEscape() { string DELIM = new String(RecordKey.PRINTED_DELIMITER, 1); RecordKey key1 = new RecordKey(); key1.appendKeyParts("1", "2", "3"); Assert.AreEqual(3, key1.numParts()); RecordKey dkey1 = new RecordKey(key1.encode()); Assert.AreEqual(3, dkey1.numParts(), "dkey1 delimiter decode"); RecordKey key2 = new RecordKey(); key2.appendKeyPart("1" + DELIM + "2" + DELIM + "3"); Assert.AreEqual(1, key2.numParts()); RecordKey dkey2 = new RecordKey(key2.encode()); Assert.AreEqual(1, dkey2.numParts(), "dkey2 delimiter decode"); // key2 > key1 Assert.AreEqual(1, key2.CompareTo(key1)); Assert.AreEqual(-1, key1.CompareTo(key2)); }
public void T02a_RecordKeySort() { String[] parts1 = { "test", "test2", "blah" }; String[] parts2 = { "test", "test3", "blah" }; // > parts 1 String[] parts3 = { "test", "test2a", "blah" }; // > parts 1 (testing per-segment sorting order!) RecordKey key1 = new RecordKey(); key1.appendKeyParts(parts1); RecordKey key2 = new RecordKey(); key2.appendKeyParts(parts2); RecordKey key3 = new RecordKey(); key3.appendKeyParts(parts3); // key2 > key1 Assert.True(key2.CompareTo(key1) > 0); Assert.True(key1.CompareTo(key2) < 0); // key3 > key1 Assert.True(key3.CompareTo(key1) > 0); Assert.True(key1.CompareTo(key3) < 0); }
public void T02b_RecordKeyNesting() { String[] parts1 = { "aaaa", "bbbb" }; String[] parts2 = { "xxxx", "yyyy", "zzzz" }; RecordKey nestedkey = new RecordKey(); nestedkey.appendKeyParts(parts2); RecordKey parentkey = new RecordKey(); parentkey.appendKeyPart(parts1[0]); // "aaaa" parentkey.appendKeyPart(nestedkey.encode()); // (xxxx,yyyy,zzzz) parentkey.appendKeyPart(parts1[1]); // "bbbb" RecordKey decodedkey = new RecordKey(parentkey.encode()); Assert.AreEqual(decodedkey.ToString(), parentkey.ToString(), "tostring versions of keys don't match"); Assert.AreEqual(decodedkey.numParts(), parentkey.numParts(), "nested delimiters are changing number of keyparts"); Assert.AreEqual(decodedkey, parentkey, "nested key encode/decode error"); }
public void T01_RecordKey() { String[] parts1 = { "test", "test2", "blah" }; { RecordKey key = new RecordKey(); key.appendKeyParts(parts1); byte[] data = key.encode(); // decode RecordKey key2 = new RecordKey(data); // verify tostring matches Assert.AreEqual(key.ToString(), key2.ToString()); // verify comparison Assert.AreEqual(0, key.CompareTo(key2)); // verify individual parts } // verify hierarchial sorting { RecordKey key1 = new RecordKey().appendParsedKey(".ROOT/GEN/000"); RecordKey key2 = new RecordKey().appendParsedKey(".ROOT/GEN/000/</aaaa"); // ord('<') -> 60 RecordKey key3 = new RecordKey().appendParsedKey(".ROOT/GEN/000/>"); // ord('>') -> 62 RecordKey key4 = new RecordKey().appendParsedKey(".ROOT/GEN"); Assert.AreEqual(true, ">".CompareTo("<") > 0, "expect '>' > '<'"); Assert.AreEqual(true, key1.CompareTo(key2) < 0, "prefix key should be considered earlier"); Assert.AreEqual(true, key3.CompareTo(key2) > 0, "but parts are considered individually before using length ord('_') > ord('<')"); IComparable<RecordKey> prefixend = RecordKey.AfterPrefix(key1); Assert.AreEqual(true, prefixend.CompareTo(key1) > 0, "prefix1"); Assert.AreEqual(true, prefixend.CompareTo(key2) > 0, "prefix2"); Assert.AreEqual(true, prefixend.CompareTo(key3) > 0, "prefix3"); Assert.AreEqual(true, prefixend.CompareTo(key4) > 0, "prefix4"); } }