public void T000_BasicTests() { MergeCandidate mc; var mm = new MergeManager_Incremental(null); mm.MIN_MERGE_SIZE = 1; // force small merge sizes okay for ours tests mm.MAX_MERGE_SIZE = 1000; // force 'infinite' merge sizes for our tests var gen0seg = new SegmentDescriptor(0, new RecordKey().appendParsedKey("A"), new RecordKey().appendParsedKey("Z")); var gen1seg = new SegmentDescriptor(1, new RecordKey().appendParsedKey("A"), new RecordKey().appendParsedKey("Z")); var gen2seg = new SegmentDescriptor(2, new RecordKey().appendParsedKey("A"), new RecordKey().appendParsedKey("Z")); // add two segments on top of eachother mm.notify_addSegment(gen0seg); mm.notify_addSegment(gen1seg); Assert.AreEqual(1, mm.getNumberOfCandidates(), "candidate count 1"); mc = mm.getBestCandidate(); Assert.AreEqual(new SegmentDescriptor[1] { gen1seg }, mc.source_segs); Assert.AreEqual(new SegmentDescriptor[1] { gen0seg }, mc.target_segs); // add a third segment mm.notify_addSegment(gen2seg); mc = mm.getBestCandidate(); System.Console.WriteLine(mc.ToString()); Assert.AreEqual(3, mm.getNumberOfCandidates(), "candidate count 2"); Assert.AreEqual(new SegmentDescriptor[2] { gen2seg, gen1seg }, mc.source_segs); Assert.AreEqual(new SegmentDescriptor[1] { gen0seg }, mc.target_segs); // test removal mm.notify_removeSegment(gen2seg); Assert.AreEqual(1, mm.getNumberOfCandidates(), "candidate count 3"); mc = mm.getBestCandidate(); Assert.AreEqual(new SegmentDescriptor[1] { gen1seg }, mc.source_segs); Assert.AreEqual(new SegmentDescriptor[1] { gen0seg }, mc.target_segs); mm.notify_removeSegment(gen1seg); Assert.AreEqual(0, mm.getNumberOfCandidates()); mm.notify_addSegment(gen1seg); Assert.AreEqual(1, mm.getNumberOfCandidates()); mm.notify_removeSegment(gen0seg); Assert.AreEqual(0, mm.getNumberOfCandidates()); }
public void T000_TestRangeBoundaries() { MergeCandidate mc; var mm = new MergeManager_Incremental(null); mm.MIN_MERGE_SIZE = 1; // force small merge sizes okay for our tests mm.MAX_MERGE_SIZE = 1000; // force 'infinite' merge sizes for our tests mm.getMaxGeneration(); var gen0abseg = new SegmentDescriptor(0, new RecordKey().appendParsedKey("A"), new RecordKey().appendParsedKey("B")); var gen0dfseg = new SegmentDescriptor(0, new RecordKey().appendParsedKey("D"), new RecordKey().appendParsedKey("F")); var gen1acseg = new SegmentDescriptor(1, new RecordKey().appendParsedKey("A"), new RecordKey().appendParsedKey("C")); var gen2azseg = new SegmentDescriptor(2, new RecordKey().appendParsedKey("A"), new RecordKey().appendParsedKey("Z")); // add two gen0 segs mm.notify_addSegment(gen0abseg); mm.notify_addSegment(gen0dfseg); Assert.AreEqual(0, mm.getNumberOfCandidates(), "candidate count 1"); // add gen1 seg mm.notify_addSegment(gen1acseg); Assert.AreEqual(1, mm.getNumberOfCandidates()); mc = mm.getBestCandidate(); Assert.AreEqual(new SegmentDescriptor[1] { gen1acseg }, mc.source_segs); Assert.AreEqual(new SegmentDescriptor[1] { gen0abseg }, mc.target_segs); // add gen2 seg mm.notify_addSegment(gen2azseg); dumpPrioritizedMergeList(mm); Assert.AreEqual(3, mm.getNumberOfCandidates(), "candidate count 2"); mc = mm.getBestCandidate(); Assert.AreEqual(new SegmentDescriptor[2] { gen2azseg, gen1acseg }, mc.source_segs); Assert.AreEqual(new SegmentDescriptor[2] { gen0abseg, gen0dfseg }, mc.target_segs); // simulate "merge down" of gen1ac -> gen0abseg var gen0acseg = new SegmentDescriptor(0, new RecordKey().appendParsedKey("A"), new RecordKey().appendParsedKey("C")); mm.notify_removeSegment(gen1acseg); mm.notify_removeSegment(gen0abseg); Assert.AreEqual(0, mm.getNumberOfCandidates(), "candidate count 3"); mm.notify_addSegment(gen0acseg); dumpPrioritizedMergeList(mm); Assert.AreEqual(1, mm.getNumberOfCandidates()); mc = mm.getBestCandidate(); Assert.AreEqual(new SegmentDescriptor[1] { gen2azseg}, mc.source_segs); Assert.AreEqual(new SegmentDescriptor[2] { gen0acseg, gen0dfseg }, mc.target_segs); }