private CompositionAlternatives2 RecursiveShrinking( string anagramCharPool, IList <Blob> dictionary, Memo2 memo, int level, int maxLevel) { if (memo.Has(anagramCharPool)) { return(memo.Get(anagramCharPool)); } if (level > maxLevel) { return(CompositionAlternatives2.DeadEnd); } var localBlackList = new List <Blob>(); foreach (var wordEquivalencyClass in dictionary) { if (localBlackList.Contains(wordEquivalencyClass)) { //this is a "big bother of an instant looser so it is a bigger looser" continue; } var difference = anagramCharPool.SubtractChars(wordEquivalencyClass.CharPool); switch (difference) { case null: //negative // this is an instant looser localBlackList.AddRange(wordEquivalencyClass.BigBrothers); continue; case "": // solution var solution = new BlobComposition(new List <Blob> { wordEquivalencyClass }); memo.Add(anagramCharPool, solution); break; default: //inconclusive var sols = CompositionAlternatives2.GetCombined(RecursiveShrinking(difference, dictionary, memo, level++), wordEquivalencyClass); if (!sols.IsDeadend) { memo.AddMultiple(anagramCharPool, sols); } break; } } if (!memo.Has(anagramCharPool)) { memo.AddDeadEnd(anagramCharPool); } return(memo.Get(anagramCharPool)); }
public void CanNotAddNull() { Assert.Throws <ArgumentException>(() => _sut.Add("a", null)); }