public void ImplementIDBEntry()
        {
            // Arrange and Act
            sut = populatedTestMatrix.SudokuCells[0];

            // Assert
            Assert.That(sut, Is.InstanceOf <IEntityBase>());
        }
        public void HaveAvailableValuesZeroCountIfValueNonZero()
        {
            // Arrange and Act
            sut = populatedTestMatrix.SudokuCells[0];

            // Assert
            Assert.That(sut.AvailableValues.Where(a => a.Available).Count, Is.EqualTo(0));
        }
        public void HaveAnID()
        {
            // Arrange and Act
            sut = populatedTestMatrix.SudokuCells[0];

            // Assert
            Assert.That(sut.Id, Is.TypeOf <int>());
            Assert.That(sut.Id, Is.EqualTo(0));
        }
        public void BeObscuredByDefault()
        {
            // Arrange and Act
            sut = populatedTestMatrix.SudokuCells[0];

            // Assert
            Assert.That(sut.Hidden, Is.EqualTo(true));
            Assert.That(sut.DisplayedValue, Is.EqualTo(0));
            Assert.That(sut.DisplayedValue, Is.Not.EqualTo(sut.Value));
        }
        public void HaveADefaultValueOfZero()
        {
            // Arrange and Act
            var testMatrix = new SudokuMatrix();

            sut = testMatrix.SudokuCells[0];

            // Assert
            Assert.That(sut.Value, Is.EqualTo(0));
        }
        public void HaveToStringOutputValueAsString()
        {
            // Arrange and Act
            sut        = populatedTestMatrix.SudokuCells[0];
            sut.Hidden = false;

            // Assert
            Assert.That(sut.ToString(), Is.TypeOf <string>());
            Assert.That(sut.ToString(), Is.EqualTo(firstInt.ToString()));
        }
        public void HaveToInt32OutputValueAsInt()
        {
            // Arrange and Act
            sut        = populatedTestMatrix.SudokuCells[0];
            sut.Hidden = false;

            // Assert
            Assert.That(sut.ToInt32(), Is.TypeOf <int>());
            Assert.That(sut.ToInt32(), Is.EqualTo(firstInt));
        }
        public void HaveAvailableValuesNineCountIfValueIsZero()
        {
            // Arrange and Act
            var testMatrix = new SudokuMatrix();

            sut = testMatrix.SudokuCells[0];

            // Assert
            Assert.That(sut.AvailableValues.Count, Is.EqualTo(9));
        }
        public void SetCoordinatesInConstructor()
        {
            // Arrange and Act
            sut = populatedTestMatrix.SudokuCells[0];

            // Assert
            Assert.That(sut.Index, Is.EqualTo(1));
            Assert.That(sut.Column, Is.EqualTo(1));
            Assert.That(sut.Region, Is.EqualTo(1));
            Assert.That(sut.Row, Is.EqualTo(1));
        }
        public void BeVisibleIfObscuredIsFalse()
        {
            // Arrange and Act
            sut        = populatedTestMatrix.SudokuCells[0];
            sut.Hidden = false;

            // Assert
            Assert.That(firstInt, Is.Not.EqualTo(0));
            Assert.That(sut.DisplayedValue, Is.EqualTo(firstInt));
            Assert.That(sut.DisplayedValue, Is.EqualTo(sut.Value));
        }
        public void HaveAnAssociatedMatrix()
        {
            // Arrange and Act
            var testMatrix = new SudokuMatrix();

            sut = testMatrix.SudokuCells[0];

            // Assert
            Assert.That(sut.SudokuMatrixId, Is.TypeOf <int>());
            Assert.That(testMatrix.Id, Is.EqualTo(sut.SudokuMatrixId));
            Assert.That(testMatrix, Is.TypeOf <SudokuMatrix>());
        }
        private static void ReviewSudokuCharacterForPossibleUpdate(ref List <int> _firstList,
                                                                   ref List <int> _secondList, ref List <int> _thirdList, ISudokuCell cell)
        {
            if (cell.Value == 0)
            {
                var i = FindSudokuValue(ref _firstList, ref _secondList, ref _thirdList, cell.Value);

                if (i != 0)
                {
                    cell.Value = i;
                }
            }
            else if (cell.Value != 0)
            {
                if (_firstList.Contains(cell.Value))
                {
                    _firstList.Remove(cell.Value);
                }
                else if (_secondList.Contains(cell.Value))
                {
                    _secondList.Remove(cell.Value);
                }
                else if (_thirdList.Contains(cell.Value))
                {
                    _thirdList.Remove(cell.Value);
                }
            }
        }