sclass Test_ProbabilisticList { MultiSetMap a = multiSetMap_outerDescTreeMap_innerBetterLinkedHashSet(); new ProbabilisticList b; int nProbabilities = 4; int nObjects = 10; int n = 1000; WithProbability makeEntry() { ret withProbability( (double) random(nProbabilities), str(charPlus('A', random(nObjects))); } run { repeat n { // add one WithProbability e = makeEntry(); print("Adding " + e); if (e.probability() > 0) // simulate default cut-off at probability 0 // Simulate the right behavior for adding same object again if (!a.contains(e.probability(), e!)) { a.remove(a.keyForValue(e!), e!); a.put(e.probability(), e!); } b.add(e); // automatically overwrites the old probability check(); // remove one e = makeEntry(); // probability doesn't matter print("Removing " + e!); a.remove(a.keyForValue(e!), e!); b.remove(e); check(); } } void check { LPair aEntries = asList(a.allEntries()); print(takeFirst(10, aEntries); assertEquals(mapPairsToList(aEntries, (p, x) -> WithProbability(p, x)), asList(b.iterator()); } } svoid test_ProbabilisticList() { new Test_ProbabilisticList().run(); }