public void CopyWithNewReferences_WithoutIMissingBoxValuesTracker_Throws()
        {
            var puzzle = new Puzzle(new int?[, ] {
                { null /* 1 */, null /* 4 */, 3, 2 },
                { null /* 2 */, null /* 3 */, null /* 1 */, 4 },
                { null /* 4 */, null /* 1 */, 2, 3 },
                { 3, null /* 2 */, 4, 1 }
            });
            var possibleValues = new PossibleValues(puzzle);
            var boxRule        = new BoxUniquenessRule(puzzle, possibleValues.AllPossible, false);
            var ruleKeeper     = new DynamicRuleKeeper(puzzle, possibleValues, new List <ISudokuRule> {
                boxRule
            });
            var heuristic = new UniqueInBoxHeuristic(
                puzzle, possibleValues, boxRule);

            var puzzleCopy                  = new Puzzle(puzzle);
            var possibleValuesCopy          = new PossibleValues(possibleValues);
            var ruleKeeperWithoutBoxTracker = new DynamicRuleKeeper(puzzleCopy, possibleValuesCopy,
                                                                    new List <ISudokuRule> {
                new ColumnUniquenessRule(puzzleCopy, possibleValues.AllPossible),
            });

            Assert.Throws <ArgumentException>(() => heuristic.CopyWithNewReferences(
                                                  puzzleCopy, possibleValuesCopy, ruleKeeperWithoutBoxTracker.GetRules()));
        }
        public void CopyWithNewReferences_WithoutIMissingBoxValuesTracker_Throws()
        {
            var puzzle = new PuzzleWithPossibleValues(new int?[][] {
                new int?[] { null /* 1 */, null /* 4 */, 3, 2 },
                new int?[] { null /* 2 */, null /* 3 */, null /* 1 */, 4 },
                new int?[] { null /* 4 */, null /* 1 */, 2, 3 },
                new int?[] { 3, null /* 2 */, 4, 1 }
            });
            var ruleKeeper = new StandardRuleKeeper();

            Assert.True(ruleKeeper.TryInit(puzzle));
            var heuristic = new UniqueInBoxHeuristic(
                (IMissingBoxValuesTracker)ruleKeeper.GetRules()[0]);

            Assert.True(heuristic.TryInitFor(puzzle));

            var puzzleCopy = new PuzzleWithPossibleValues(puzzle);
            var ruleKeeperWithoutBoxTracker = new DynamicRuleKeeper(new IRule[] {
                new ColumnUniquenessRule(),
            });

            Assert.Throws <ArgumentException>(() => heuristic.CopyWithNewReferences(
                                                  puzzleCopy, ruleKeeperWithoutBoxTracker.GetRules()));
        }