public void ComparerTest() { var comparer = new PredicateComparer(1, IterationType.Value); Assert.Throws <ArgumentNullException>(() => comparer.WriteData(null)); Assert.Throws <ArgumentNullException>(() => comparer.ReadData(null)); using var output = new ObjectDataOutput(1024, _serializationService, Endianness.BigEndian); comparer.WriteData(output); var c = new PredicateComparer(); using var input = new ObjectDataInput(output.Buffer, _serializationService, Endianness.BigEndian); c.ReadData(input); Assert.That(c.Type, Is.EqualTo(comparer.Type)); Assert.That(c.IterationType, Is.EqualTo(comparer.IterationType)); // entry Assert.That(new PredicateComparer(0, IterationType.Key).Compare(("key1", "value1"), ("key2", "value2")), Is.EqualTo("key1".CompareTo("key2"))); Assert.That(new PredicateComparer(1, IterationType.Key).Compare(("key1", "value1"), ("key2", "value2")), Is.EqualTo("key2".CompareTo("key1"))); Assert.That(new PredicateComparer(2, IterationType.Key).Compare(("key1", "value1"), ("key2", "value2")), Is.EqualTo(0)); Assert.That(new PredicateComparer(2, IterationType.Key).Compare(("key1", "value1"), ("key2x", "value2")), Is.EqualTo("key1".Length.CompareTo("key2x".Length))); Assert.That(new PredicateComparer(3, IterationType.Key).Compare(("key1", "value1"), ("key2", "value2")), Is.EqualTo(0)); Assert.That(new PredicateComparer(3, IterationType.Key).Compare(("key1", "value1"), ("key2x", "value2")), Is.EqualTo(0)); // uh? Assert.That(new PredicateComparer(0, (IterationType)666).Compare(("key1", "value1"), ("key2", "value2")), Is.EqualTo("key1".CompareTo("key2"))); Assert.That(new PredicateComparer(1, (IterationType)666).Compare(("key1", "value1"), ("key2", "value2")), Is.EqualTo("key2".CompareTo("key1"))); Assert.That(new PredicateComparer(2, (IterationType)666).Compare(("key1", "value1"), ("key2", "value2")), Is.EqualTo(0)); Assert.That(new PredicateComparer(2, (IterationType)666).Compare(("key1", "value1"), ("key2x", "value2")), Is.EqualTo("key1".Length.CompareTo("key2x".Length))); Assert.That(new PredicateComparer(3, (IterationType)666).Compare(("key1", "value1"), ("key2", "value2")), Is.EqualTo(0)); Assert.That(new PredicateComparer(3, (IterationType)666).Compare(("key1", "value1"), ("key2x", "value2")), Is.EqualTo(0)); // value Assert.That(new PredicateComparer(0, IterationType.Value).Compare(("key1", "value1"), ("key2", "value2")), Is.EqualTo("value1".CompareTo("value2"))); Assert.That(new PredicateComparer(1, IterationType.Value).Compare(("key1", "value1"), ("key2", "value2")), Is.EqualTo("value2".CompareTo("value1"))); Assert.That(new PredicateComparer(2, IterationType.Value).Compare(("key1", "value1"), ("key2", "value2")), Is.EqualTo(0)); Assert.That(new PredicateComparer(2, IterationType.Value).Compare(("key1", "value1"), ("key2", "value2x")), Is.EqualTo("value1".Length.CompareTo("value2x".Length))); Assert.That(new PredicateComparer(3, IterationType.Value).Compare(("key1", "value1"), ("key2", "value2")), Is.EqualTo(0)); Assert.That(new PredicateComparer(3, IterationType.Value).Compare(("key1", "value1"), ("key2", "value2x")), Is.EqualTo(0)); // entry Assert.That(new PredicateComparer(0, IterationType.Entry).Compare(("key1", "value1"), ("key2", "value2")), Is.EqualTo("key1:::value1".CompareTo("key2:::value2"))); Assert.That(new PredicateComparer(1, IterationType.Entry).Compare(("key1", "value1"), ("key2", "value2")), Is.EqualTo("key2:::value2".CompareTo("key1:::value1"))); Assert.That(new PredicateComparer(2, IterationType.Entry).Compare(("key1", "value1"), ("key2", "value2")), Is.EqualTo(0)); Assert.That(new PredicateComparer(2, IterationType.Entry).Compare(("key1", "value1"), ("key2", "value2x")), Is.EqualTo("key1:::value1".Length.CompareTo("key2:::value2x".Length))); Assert.That(new PredicateComparer(3, IterationType.Entry).Compare(("key1", "value1"), ("key2", "value2")), Is.EqualTo(0)); Assert.That(new PredicateComparer(3, IterationType.Entry).Compare(("key1", "value1"), ("key2", "value2x")), Is.EqualTo(0)); Assert.That(new PredicateComparer(0, IterationType.Entry).Compare(("abc", "defghi"), ("abcdef", "ghi")), Is.EqualTo("abc:::defghi".CompareTo("abcdef:::ghi"))); // NOTE // the behavior for non-supported types and iteration types is ... weird }