public void TestComplementarySetRemove() { var set = new ComplementarySet<string>(); set.Remove(Value2); Assert.False(set.Contains(Value2), "set doesn't contain value removed"); }
internal override ISet<char?> ComputeFirst(ISet<Parser> seen) { if (seen.Contains(this)) { return null; } else { var newSeen = new HashSet<Parser>(seen); newSeen.Add(this); var setLeft = Left.ComputeFirst(newSeen); if (setLeft != null) { if (setLeft.Count == 0 || setLeft.Contains(null)) { var setRight = Right.ComputeFirst(newSeen); if (setRight != null) { if (setLeft.IsComplement()) { var newSet = new ComplementarySet<char?>(setLeft as ComplementarySet<char?>); newSet.Remove(null); newSet.UnionWith(setRight); return newSet; } else { var newSetLeft = new HashSet<char?>(setLeft); newSetLeft.Remove(null); var newSetRight = new HashSet<char?>(setRight); newSetRight.UnionWith(newSetLeft); return newSetRight; } } } } return setLeft; } }