public void ConvertShouldConvertToReversePolishNotation()
        {
            var input = new[] // 3 + 4 * 2 / (1 - 5)^2
            {
                InputCell.Number(3),
                InputCell.Symbol("+"),
                InputCell.Number(4),
                InputCell.Symbol("*"),
                InputCell.Number(2),
                InputCell.Symbol("/"),
                InputCell.Symbol("("),
                InputCell.Number(1),
                InputCell.Symbol("-"),
                InputCell.Number(5),
                InputCell.Symbol(")"),
                InputCell.Symbol("^"),
                InputCell.Number(2),
            };

            var result = new RpnConverter(new InputChecker()).Convert(input);

            // 3 4 2 * 1 5 - 2 ^ / +

            Assert.AreEqual(3, result[0].Value);
            Assert.AreEqual(4, result[1].Value);
            Assert.AreEqual(2, result[2].Value);
            Assert.AreEqual("*", result[3].Value);
            Assert.AreEqual(1, result[4].Value);
            Assert.AreEqual(5, result[5].Value);
            Assert.AreEqual("-", result[6].Value);
            Assert.AreEqual(2, result[7].Value);
            Assert.AreEqual("^", result[8].Value);
            Assert.AreEqual("/", result[9].Value);
            Assert.AreEqual("+", result[10].Value);
        }
Пример #2
0
 public void IsOperationShouldReturnTrue()
 {
     Assert.IsTrue(InputCell.Symbol("+").IsOperation());
     Assert.IsTrue(InputCell.Symbol("-").IsOperation());
     Assert.IsTrue(InputCell.Symbol("*").IsOperation());
     Assert.IsTrue(InputCell.Symbol("/").IsOperation());
     Assert.IsTrue(InputCell.Symbol("^").IsOperation());
 }
Пример #3
0
    public InputCell CreateInputCell(int value)
    {
        var cell = new InputCell(_cells.Count, value);

        cell.Changed += OnCellChanged;

        _cells[cell.Id] = cell;
        return(cell);
    }
Пример #4
0
        public CalculationService(int row)
        {
            Row = row;

            ResultValue = InputCell.CombineLatest(
                GetPreviousResultValue(),
                (i, r) => i + r
                )
                          .Publish().RefCount();
        }
Пример #5
0
    public void SetActiveCell(InputCell _cell)
    {
        if(activeCell)
            activeCell.DeactivateCell();

        activeCell = _cell;

        if(activeCell)
            activeCell.ActivateCell();
    }
Пример #6
0
    public InputCell CreateInputCell(int value)
    {
        var inputCell = new InputCell(cells.Count, value);

        inputCell.Changed += CellChanged;

        cells[inputCell.Id] = inputCell;

        return(inputCell);
    }
Пример #7
0
 public void WeightShouldReturnCorrectWeigth()
 {
     Assert.AreEqual(0, InputCell.Number(1).Weight);
     Assert.AreEqual(1, InputCell.Symbol(")").Weight);
     Assert.AreEqual(1, InputCell.Symbol("(").Weight);
     Assert.AreEqual(2, InputCell.Symbol("+").Weight);
     Assert.AreEqual(2, InputCell.Symbol("-").Weight);
     Assert.AreEqual(3, InputCell.Symbol("*").Weight);
     Assert.AreEqual(3, InputCell.Symbol("/").Weight);
     Assert.AreEqual(4, InputCell.Symbol("^").Weight);
 }
Пример #8
0
        /// <summary>
        /// Defines this cell as an input cell for a scenario
        /// </summary>
        /// <returns></returns>
        public InputCell ToInputCell()
        {
            var cell = new InputCell()
            {
                Id          = Id,
                Content     = Content,
                Location    = Location,
                SifLocation = SifLocation
            };

            return(cell);
        }
        public void CheckShouldThrowExceptionIfThereIsOpeartionsInLastCell()
        {
            var input = new[]
            {
                InputCell.Number(2),
                InputCell.Symbol("+"),
                InputCell.Number(2),
                InputCell.Symbol("+")
            };

            Assert.Throws <ArgumentException>(() =>
                                              new InputChecker().Check(input));
        }
Пример #10
0
        public static void SetCellValue_object___Should_throw_ArgumentException___When_value_is_not_null_and_not_assignable_to_TValue()
        {
            // Arrange
            var systemUnderTest = new InputCell <int>();

            var timestampUtc = A.Dummy <UtcDateTime>();

            var details = A.Dummy <string>();

            // Act
            var actual = Record.Exception(() => systemUnderTest.SetCellValue(A.Dummy <Version>(), timestampUtc, details));

            // Assert
            actual.AsTest().Must().BeOfType <ArgumentException>();
            actual.Message.AsTest().Must().BeEqualTo("value is not of type int.");
        }
Пример #11
0
    private List <GridObject> SolveInput(InputCell _inputCell, List <GridObject> _checkedObjects)
    {
        _inputCell.CurrentValues = new int[] { _inputCell.InputValue };
        GridObject exit = GetCell(_inputCell.Exit);

        if (exit != null)
        {
            return(new List <GridObject> {
                exit
            });
        }
        else
        {
            return(null);
        }
    }
Пример #12
0
    private void GenerateInput()
    {
        uint x     = 0;
        uint y     = (uint)Random.Range(1, DimensionY);
        int  value = Random.Range(1, MaxInputValue + 1);

        while (GetCell(new CellCoordinates(x, y)) != null)
        {
            y = (uint)Random.Range(1, DimensionY);
        }

        InputCell input = new InputCell(new CellCoordinates(x, y), ObjectOrientation.Or0, value);

        m_inputs.Add(input);
        InsertObject(input);
        Debug.Log("GridManager: Input added - (" + x + "," + y + ") value " + value);
    }
        public void CountShouldReturn3Dot5()
        {
            // 3 + 4 * 2 / (1 - 5)^2 = 3.5
            // 3 4 2 * 1 5 - 2 ^ / +
            var input = new[]
            {
                InputCell.Number(3),
                InputCell.Number(4),
                InputCell.Number(2),
                InputCell.Symbol("*"),
                InputCell.Number(1),
                InputCell.Number(5),
                InputCell.Symbol("-"),
                InputCell.Number(2),
                InputCell.Symbol("^"),
                InputCell.Symbol("/"),
                InputCell.Symbol("+")
            };

            var result = new RpnCounter().Count(input);

            Assert.AreEqual(3.5, result);
        }
Пример #14
0
 public void IsNumberShouldReturnTrue()
 {
     Assert.IsTrue(InputCell.Number(1).IsNumber());
 }
Пример #15
0
 public void TransferValue(InputCell _cell)
 {
     _cell.MyValue = MyValue;
         MyValue = numberPool.GetNextNumber();
 }
Пример #16
0
 /// <summary>
 /// Defines this cell as an input cell for a scenario
 /// </summary>
 /// <returns></returns>
 public InputCell ToInputCell()
 {
     var cell = new InputCell()
     {
         Id = Id,
         Content = Content,
         Location = Location,
         SifLocation = SifLocation
     };
     return cell;
 }
Пример #17
0
    private void PassThroughCell(CellCoordinates _cell)
    {
        if (m_passedThrough.Peek() != _cell)
        {
            CellCoordinates head = m_passedThrough.Pop();
            if (_cell != head && IsAdjacentTo(_cell, head))
            {
                // Wait till we move, and only consider if it is adjacent
                if (m_passedThrough.Count >= 1)
                {
                    CellCoordinates prev = m_passedThrough.Pop();
                    if (_cell == prev)
                    {
                        // Early out if we went backwards
                        Log("WireManager: Going backwards to " + _cell.ToString());
                        m_passedThrough.Push(prev);
                        return;
                    }
                    m_passedThrough.Push(prev);
                }
                else
                {
                    // This is the first move, assert that we head onto a valid OUTPUT of our starting gate
                    GridObject gridObject = m_gridManager.GetCell(head);
                    switch (gridObject.ObjectType)
                    {
                    case GridObjectType.Input:
                    {
                        InputCell input = (InputCell)gridObject;
                        if (input.Exit != _cell)
                        {
                            m_passedThrough.Push(head);                                       // Put the head back on and early out, this is not the exit cell
                            return;
                        }
                        break;
                    }

                    case GridObjectType.Gate:
                    {
                        Gate gate    = (Gate)gridObject;
                        bool isValid = false;
                        foreach (CellCoordinates output in gate.Outputs)
                        {
                            if (output == _cell)
                            {
                                isValid = true;
                            }
                        }
                        if (!isValid)
                        {
                            m_passedThrough.Push(head);                                       // We are not over any valid output cell, put the head back on and early out
                            return;
                        }
                        break;
                    }

                    default:
                    {
                        Debug.LogError("WireManager: PassThrough found starting position that wasn't a Gate or Input.");
                        m_passedThrough.Push(head);                                   // Put the head back on and early out
                        return;
                    }
                    }
                }
                m_passedThrough.Push(head);                   // Put the head back on, moving forwards

                GridObject headObject = m_gridManager.GetCell(head);
                if ((m_passedThrough.Count == 1 || headObject == null || (headObject.ObjectType != GridObjectType.Gate && headObject.ObjectType != GridObjectType.Output)) &&
                    !m_passedThrough.Contains(_cell))
                {
                    // Check we haven't been here before on this path, and that we haven't already arrived at a destination
                    GridObject cellObject = m_gridManager.GetCell(_cell);
                    if (cellObject == null)
                    {
                        // Cell is unoccupied, add it
                        Log("WireManager: Passing through " + _cell.ToString());
                        m_passedThrough.Push(_cell);
                    }
                    else
                    {
                        // Need to check it's a valid goal and we arrived in an acceptable way
                        switch (cellObject.ObjectType)
                        {
                        case GridObjectType.Gate:
                        {
                            Gate gate    = (Gate)cellObject;
                            bool isValid = false;
                            foreach (CellCoordinates input in gate.Inputs)
                            {
                                if (input == head)
                                {
                                    isValid = true;
                                    break;
                                }
                            }
                            if (isValid)
                            {
                                // Head lines up with an input for this gate so add Gate as end point
                                Log("WireManager: Passing through " + _cell.ToString());
                                m_passedThrough.Push(_cell);
                            }
                            else
                            {
                                return;
                            }
                            break;
                        }

                        case GridObjectType.Output:
                        {
                            OutputCell output = (OutputCell)cellObject;
                            if (output.Entry == head)
                            {
                                // Entry of Output lines up with head, so add Output as end point
                                Log("WireManager: Passing through " + _cell.ToString());
                                m_passedThrough.Push(_cell);
                            }
                            else
                            {
                                ;
                                return;
                            }
                            break;
                        }

                        default:
                        {
                            return;
                        }
                        }
                    }
                }
                return;
            }
            m_passedThrough.Push(head);               // Put the head back on, no new additions
        }
    }
Пример #18
0
        static InputCellTValueTest()
        {
            ConstructorArgumentValidationTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <InputCell <Version> >
            {
                Name             = "constructor should throw ArgumentOutOfRangeException when parameter 'columnsSpanned' is 0",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <InputCell <Version> >();

                    var result = new InputCell <Version>(
                        referenceObject.Id,
                        0,
                        referenceObject.Details,
                        referenceObject.Validation,
                        referenceObject.ValidationEvents,
                        referenceObject.DefaultAvailability,
                        referenceObject.AvailabilityCheck,
                        referenceObject.AvailabilityCheckEvents,
                        referenceObject.InputEvents,
                        referenceObject.ValueFormat,
                        referenceObject.Format,
                        referenceObject.HoverOver);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
                ExpectedExceptionMessageContains = new[] { "columnsSpanned is 0; must be null or >= 1.", },
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <InputCell <Version> >
            {
                Name             = "constructor should throw ArgumentOutOfRangeException when parameter 'columnsSpanned' is -1",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <InputCell <Version> >();

                    var result = new InputCell <Version>(
                        referenceObject.Id,
                        -1,
                        referenceObject.Details,
                        referenceObject.Validation,
                        referenceObject.ValidationEvents,
                        referenceObject.DefaultAvailability,
                        referenceObject.AvailabilityCheck,
                        referenceObject.AvailabilityCheckEvents,
                        referenceObject.InputEvents,
                        referenceObject.ValueFormat,
                        referenceObject.Format,
                        referenceObject.HoverOver);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
                ExpectedExceptionMessageContains = new[] { "columnsSpanned is -1; must be null or >= 1.", },
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <InputCell <Version> >
            {
                Name             = "constructor should throw ArgumentOutOfRangeException when parameter 'columnsSpanned' is negative number",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <InputCell <Version> >();

                    var result = new InputCell <Version>(
                        referenceObject.Id,
                        A.Dummy <NegativeInteger>(),
                        referenceObject.Details,
                        referenceObject.Validation,
                        referenceObject.ValidationEvents,
                        referenceObject.DefaultAvailability,
                        referenceObject.AvailabilityCheck,
                        referenceObject.AvailabilityCheckEvents,
                        referenceObject.InputEvents,
                        referenceObject.ValueFormat,
                        referenceObject.Format,
                        referenceObject.HoverOver);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
                ExpectedExceptionMessageContains = new[] { "columnsSpanned", "must be null or >= 1.", },
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <InputCell <Version> >
            {
                Name             = "constructor should throw ArgumentException when parameter 'validationEvents' contains a null element",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <InputCell <Version> >();

                    var result = new InputCell <Version>(
                        referenceObject.Id,
                        referenceObject.ColumnsSpanned,
                        referenceObject.Details,
                        referenceObject.Validation,
                        new[] { A.Dummy <CellValidationEventBase>(), null, A.Dummy <CellValidationEventBase>() },
                        referenceObject.DefaultAvailability,
                        referenceObject.AvailabilityCheck,
                        referenceObject.AvailabilityCheckEvents,
                        referenceObject.InputEvents,
                        referenceObject.ValueFormat,
                        referenceObject.Format,
                        referenceObject.HoverOver);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentException),
                ExpectedExceptionMessageContains = new[] { "validationEvents contains a null element", },
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <InputCell <Version> >
            {
                Name             = "constructor should throw ArgumentException when parameter 'validation' is is null but parameter 'validationEvents' is not null nor empty.",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <InputCell <Version> >();

                    var result = new InputCell <Version>(
                        referenceObject.Id,
                        referenceObject.ColumnsSpanned,
                        referenceObject.Details,
                        null,
                        Some.ReadOnlyDummies <CellValidationEventBase>().ToList(),
                        referenceObject.DefaultAvailability,
                        referenceObject.AvailabilityCheck,
                        referenceObject.AvailabilityCheckEvents,
                        referenceObject.InputEvents,
                        referenceObject.ValueFormat,
                        referenceObject.Format,
                        referenceObject.HoverOver);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentException),
                ExpectedExceptionMessageContains = new[] { "There is no validation specified, however one or more validationEvents exists.", },
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <InputCell <Version> >
            {
                Name             = "constructor should throw ArgumentOutOfRangeException when parameter 'defaultAvailability' is neither Availability.Enabled nor Availabilty.Disabled",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <InputCell <Version> >();

                    var result = new InputCell <Version>(
                        referenceObject.Id,
                        referenceObject.ColumnsSpanned,
                        referenceObject.Details,
                        referenceObject.Validation,
                        referenceObject.ValidationEvents,
                        Availability.Unknown,
                        referenceObject.AvailabilityCheck,
                        referenceObject.AvailabilityCheckEvents,
                        referenceObject.InputEvents,
                        referenceObject.ValueFormat,
                        referenceObject.Format,
                        referenceObject.HoverOver);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
                ExpectedExceptionMessageContains = new[] { "defaultAvailability is neither Availability.Enabled nor Availability.Disabled", },
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <InputCell <Version> >
            {
                Name             = "constructor should throw ArgumentException when parameter 'availabilityCheckEvents' contains a null element",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <InputCell <Version> >();

                    var result = new InputCell <Version>(
                        referenceObject.Id,
                        referenceObject.ColumnsSpanned,
                        referenceObject.Details,
                        referenceObject.Validation,
                        referenceObject.ValidationEvents,
                        referenceObject.DefaultAvailability,
                        referenceObject.AvailabilityCheck,
                        new[] { A.Dummy <CellAvailabilityCheckEventBase>(), null, A.Dummy <CellAvailabilityCheckEventBase>() },
                        referenceObject.InputEvents,
                        referenceObject.ValueFormat,
                        referenceObject.Format,
                        referenceObject.HoverOver);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentException),
                ExpectedExceptionMessageContains = new[] { "availabilityCheckEvents contains a null element", },
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <InputCell <Version> >
            {
                Name             = "constructor should throw ArgumentException when parameter 'availabilityCheck' is is null but parameter 'availabilityCheckEvents' is not null nor empty.",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <InputCell <Version> >();

                    var result = new InputCell <Version>(
                        referenceObject.Id,
                        referenceObject.ColumnsSpanned,
                        referenceObject.Details,
                        referenceObject.Validation,
                        referenceObject.ValidationEvents,
                        referenceObject.DefaultAvailability,
                        null,
                        Some.ReadOnlyDummies <CellAvailabilityCheckEventBase>().ToList(),
                        referenceObject.InputEvents,
                        referenceObject.ValueFormat,
                        referenceObject.Format,
                        referenceObject.HoverOver);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentException),
                ExpectedExceptionMessageContains = new[] { "There is no availabilityCheck specified, however one or more availabilityCheckEvents exists", },
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <InputCell <Version> >
            {
                Name             = "constructor should throw ArgumentException when parameter 'inputEvents' contains a null element",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <InputCell <Version> >();

                    var result = new InputCell <Version>(
                        referenceObject.Id,
                        referenceObject.ColumnsSpanned,
                        referenceObject.Details,
                        referenceObject.Validation,
                        referenceObject.ValidationEvents,
                        referenceObject.DefaultAvailability,
                        referenceObject.AvailabilityCheck,
                        referenceObject.AvailabilityCheckEvents,
                        new[] { A.Dummy <CellInputEventBase>(), null, A.Dummy <CellInputEventBase>() },
                        referenceObject.ValueFormat,
                        referenceObject.Format,
                        referenceObject.HoverOver);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentException),
                ExpectedExceptionMessageContains = new[] { "inputEvents contains a null element", },
            });
        }
    private bool IsConnected(bool _isOutput, CellCoordinates _coords, GridObject _startObject)
    {
        //Check Us
        GridObject gridObject = gridManager.GetCell(_coords);

        if (gridObject != null)
        {
            switch (gridObject.ObjectType)
            {
            case GridObjectType.Wire:
            {
                Wire wire = (Wire)gridObject;
                for (uint i = 0; i < _startObject.Coordinates.Length; ++i)
                {
                    CellCoordinates toCompare = _isOutput ? wire.Entry : wire.Exit;
                    if (_startObject.Coordinates[i] == toCompare)
                    {
                        return(true);
                    }
                }
                break;
            }

            case GridObjectType.Input:
            {
                InputCell cell = (InputCell)gridObject;
                for (uint i = 0; i < _startObject.Coordinates.Length; ++i)
                {
                    if (_startObject.Coordinates[i] == cell.Exit)
                    {
                        if (_startObject.ObjectType == GridObjectType.Gate)
                        {
                            Gate usAsGate = (Gate)gridManager.GetCell(_startObject.Coordinates[i]);

                            foreach (CellCoordinates input in usAsGate.Inputs)
                            {
                                if (input == _coords)
                                {
                                    return(true);
                                }
                            }
                        }
                        else
                        {
                            return(true);
                        }
                    }
                }
                break;
            }

            case GridObjectType.Output:
            {
                OutputCell cell = (OutputCell)gridObject;
                for (uint i = 0; i < _startObject.Coordinates.Length; ++i)
                {
                    if (_startObject.Coordinates[i] == cell.Entry)
                    {
                        if (_startObject.ObjectType == GridObjectType.Gate)
                        {
                            Gate usAsGate = (Gate)gridManager.GetCell(_startObject.Coordinates[i]);

                            foreach (CellCoordinates output in usAsGate.Outputs)
                            {
                                if (output == _coords)
                                {
                                    return(true);
                                }
                            }
                        }
                        else
                        {
                            return(true);
                        }
                    }
                }
                break;
            }

            case GridObjectType.Gate:
            {
                Gate gateCell = (Gate)gridObject;
                for (uint i = 0; i < _startObject.Coordinates.Length; ++i)
                {
                    for (uint j = 0; j < (_isOutput? gateCell.Inputs.Length : gateCell.Outputs.Length); ++j)
                    {
                        CellCoordinates[] toCompare = _isOutput ? gateCell.Inputs : gateCell.Outputs;
                        if (_startObject.Coordinates[i] == toCompare[j])
                        {
                            return(true);
                        }
                    }
                }

                break;
            }
            }
        }
        return(false);
    }
        public DataStructureDummyFactory()
        {
            // <------------------- ENUMS ------------------------>
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(Availability.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(AvailabilityCheckStatus.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(AvailabilityCheckStepAction.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(BorderStyle.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(BorderWeight.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(BytesPayloadLinkedResourceKind.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(CellOpExecutionOutcome.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(CellOpExecutionStatus.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(CompareOperator.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(FillPatternStyle.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(HorizontalAlignment.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(InnerBorderEdges.None);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(LinkTarget.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(MediaReferenceKind.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(MessageFormatKind.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(NumberFormatDigitGroupKind.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(NumberFormatNegativeDisplayKind.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(NumberFormatPercentDisplayKind.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(OuterBorderSides.None);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(SlotSelectionStrategy.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(StringPayloadLinkedResourceKind.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(UrlLinkedResourceKind.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(ValidationStatus.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(ValidationStepAction.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(Validity.Unknown);
            AutoFixtureBackedDummyFactory.ConstrainDummyToExclude(VerticalAlignment.Unknown);

            // <------------------- INTERFACES ------------------------>
            AutoFixtureBackedDummyFactory.AddDummyCreator <IAvailabilityCheckCell>(A.Dummy <NotSlottedCellBase>);
            AutoFixtureBackedDummyFactory.AddDummyCreator <ICell>(A.Dummy <CellBase>);
            AutoFixtureBackedDummyFactory.AddDummyCreator <INotSlottedCell>(A.Dummy <NotSlottedCellBase>);
            AutoFixtureBackedDummyFactory.AddDummyCreator <IValidationCell>(A.Dummy <NotSlottedCellBase>);
            AutoFixtureBackedDummyFactory.AddDummyCreator <ICellValueFormat <Version> >(A.Dummy <CellValueFormatBase <Version> >);
            AutoFixtureBackedDummyFactory.AddDummyCreator <IHoverOver>(A.Dummy <HoverOverBase>);
            AutoFixtureBackedDummyFactory.AddDummyCreator <ILink>(A.Dummy <SimpleLink>);
            AutoFixtureBackedDummyFactory.AddDummyCreator <ILinkedResource>(A.Dummy <LinkedResourceBase>);
            AutoFixtureBackedDummyFactory.AddDummyCreator <IOperationOutputCell <Version> >(A.Dummy <OperationCell <Version> >);

            // <------------------- OPERATIONS ------------------------>
            RegisterReturningOperation <bool>();
            RegisterReturningOperation <decimal>();
            RegisterReturningOperation <string>();
            RegisterReturningOperation <ValidationResult>();
            RegisterReturningOperation <AvailabilityCheckResult>();
            RegisterReturningOperation <Availability>();
            RegisterReturningOperation <Validity>();
            RegisterReturningOperation <CellLocatorBase>();
            RegisterReturningOperation <CompareOperator>();

            // <------------------- MODELS ------------------------>

            // Report
            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var numberOfSections = ThreadSafeRandom.Next(1, 4);

                var result = new Report(A.Dummy <string>(), Some.ReadOnlyDummies <Section>(numberOfSections).ToList(), A.Dummy <string>(), A.Dummy <UtcDateTime>(), Some.ReadOnlyDummies <SimpleLink>().ToList(), A.Dummy <AdditionalReportInfo>(), A.Dummy <ReportFormat>());

                return(result);
            });

            // TreeTable
            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var numberOfColumns = GetRandomNumberOfColumns();

                var columns = Some.ReadOnlyDummies <Column>(numberOfColumns).ToList();

                var tableColumns = new TableColumns(columns, A.Dummy <ColumnFormat>());

                var tableRows = BuildTableRows(columns.Count);

                var result = new TreeTable(tableColumns, tableRows, A.Dummy <TableFormat>());

                return(result);
            });

            // TableRows
            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = BuildTableRows(GetRandomNumberOfColumns());

                return(result);
            });

            // HeaderRows
            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var headerRows = BuildFlatRows(GetRandomNumberOfColumns());

                var result = new HeaderRows(headerRows, A.Dummy <HeaderRowsFormat>());

                return(result);
            });

            // DataRows
            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var allDataRows = BuildDataRows(GetRandomNumberOfColumns());

                var result = new DataRows(allDataRows, A.Dummy <DataRowsFormat>());

                return(result);
            });

            // FooterRows
            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var footerRows = BuildFlatRows(GetRandomNumberOfColumns());

                var result = new FooterRows(footerRows, A.Dummy <FooterRowsFormat>());

                return(result);
            });

            // Row
            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = BuildDataRow(GetRandomNumberOfColumns());

                return(result);
            });

            // FlatRow
            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = BuildFlatRow(GetRandomNumberOfColumns(), allowSpanningCells: true);

                return(result);
            });

            // SlottedCell
            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var columnsSpanned = GetRandomColumnsSpannedByCell();

                var cells = Some.ReadOnlyDummies <NotSlottedCellBase>().Select(_ => _.DeepCloneWithColumnsSpanned(columnsSpanned)).Cast <NotSlottedCellBase>().ToList();

                var slotIdToCellMap = cells.ToDictionary(_ => A.Dummy <string>(), _ => (INotSlottedCell)_);

                var defaultSlotId = slotIdToCellMap.ElementAt(ThreadSafeRandom.Next(0, slotIdToCellMap.Count)).Key;

                var result = new SlottedCell(slotIdToCellMap, defaultSlotId, A.Dummy <string>(), columnsSpanned, A.Dummy <string>());

                return(result);
            });

            // InputCell<Version>
            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new InputCell <Version>(
                    A.Dummy <string>(),
                    GetRandomColumnsSpannedByCell(),
                    A.Dummy <string>(),
                    A.Dummy <Validation>(),
                    Some.ReadOnlyDummies <CellValidationEventBase>().ToList(),
                    A.Dummy <Availability>(),
                    A.Dummy <AvailabilityCheck>(),
                    Some.ReadOnlyDummies <CellAvailabilityCheckEventBase>().ToList(),
                    Some.ReadOnlyDummies <CellInputEventBase>().ToList(),
                    A.Dummy <ICellValueFormat <Version> >(),
                    A.Dummy <CellFormat>(), A.Dummy <IHoverOver>());

                return(result);
            });

            // NullCell
            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new NullCell(
                    A.Dummy <string>(),
                    GetRandomColumnsSpannedByCell(),
                    A.Dummy <string>(),
                    A.Dummy <Validation>(),
                    Some.ReadOnlyDummies <CellValidationEventBase>().ToList(),
                    A.Dummy <Availability>(),
                    A.Dummy <AvailabilityCheck>(),
                    Some.ReadOnlyDummies <CellAvailabilityCheckEventBase>().ToList(),
                    A.Dummy <CellFormat>(),
                    A.Dummy <IHoverOver>(),
                    A.Dummy <ILink>());

                return(result);
            });

            // ConstCell<Version>
            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new ConstCell <Version>(
                    A.Dummy <Version>(),
                    A.Dummy <string>(),
                    GetRandomColumnsSpannedByCell(),
                    A.Dummy <string>(),
                    A.Dummy <Validation>(),
                    Some.ReadOnlyDummies <CellValidationEventBase>().ToList(),
                    A.Dummy <Availability>(),
                    A.Dummy <AvailabilityCheck>(),
                    Some.ReadOnlyDummies <CellAvailabilityCheckEventBase>().ToList(),
                    A.Dummy <ICellValueFormat <Version> >(),
                    A.Dummy <CellFormat>(),
                    A.Dummy <IHoverOver>(),
                    A.Dummy <ILink>());

                return(result);
            });

            // OperationOutputCell<Version>
            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new OperationCell <Version>(
                    A.Dummy <IReturningOperation <Version> >(),
                    A.Dummy <string>(),
                    GetRandomColumnsSpannedByCell(),
                    A.Dummy <string>(),
                    A.Dummy <Validation>(),
                    Some.ReadOnlyDummies <CellValidationEventBase>().ToList(),
                    A.Dummy <Availability>(),
                    A.Dummy <AvailabilityCheck>(),
                    Some.ReadOnlyDummies <CellAvailabilityCheckEventBase>().ToList(),
                    Some.ReadOnlyDummies <CellOpExecutionEventBase>().ToList(),
                    A.Dummy <ICellValueFormat <Version> >(),
                    A.Dummy <CellFormat>(),
                    A.Dummy <IHoverOver>(),
                    A.Dummy <ILink>());

                return(result);
            });

            // DateTimeFormat
            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var localize = A.Dummy <bool>();

                var result = new DateTimeFormat(A.Dummy <DateTimeFormatKind>(), A.Dummy <CultureKind>(), localize, localize ? A.Dummy <StandardTimeZone>() : (StandardTimeZone?)null);

                return(result);
            });

            // ReportFormat
            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var displayTimestamp = A.Dummy <bool>();

                var result = new ReportFormat(displayTimestamp, displayTimestamp ? A.Dummy <DateTimeFormat>() : null, A.Dummy <ReportFormatOptions>());

                return(result);
            });

            // Color
            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = Color.FromArgb(A.Dummy <byte>(), A.Dummy <byte>(), A.Dummy <byte>());

                return(result);
            });

            // Events
            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new CellAvailabilityCheckClearedEvent(A.Dummy <UtcDateTime>(), A.Dummy <string>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new CellAvailabilityCheckDeterminedCellDisabledEvent(A.Dummy <UtcDateTime>(), A.Dummy <string>(), A.Dummy <string>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new CellAvailabilityCheckDeterminedCellEnabledEvent(A.Dummy <UtcDateTime>(), A.Dummy <string>(), A.Dummy <string>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new CellAvailabilityCheckFailedEvent(A.Dummy <UtcDateTime>(), A.Dummy <string>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new CellInputAppliedEvent <Version>(A.Dummy <UtcDateTime>(), A.Dummy <Version>(), A.Dummy <string>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new CellInputClearedEvent(A.Dummy <UtcDateTime>(), A.Dummy <string>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new CellOpExecutionAbortedEvent(A.Dummy <UtcDateTime>(), A.Dummy <string>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new CellOpExecutionClearedEvent(A.Dummy <UtcDateTime>(), A.Dummy <string>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new CellOpExecutionCompletedEvent <Version>(A.Dummy <UtcDateTime>(), A.Dummy <string>(), A.Dummy <Version>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new CellOpExecutionDeemedNotApplicableEvent(A.Dummy <UtcDateTime>(), A.Dummy <string>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new CellOpExecutionFailedEvent(A.Dummy <UtcDateTime>(), A.Dummy <string>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new CellValidationAbortedEvent(A.Dummy <UtcDateTime>(), A.Dummy <string>(), A.Dummy <string>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new CellValidationClearedEvent(A.Dummy <UtcDateTime>(), A.Dummy <string>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new CellValidationDeemedNotApplicableEvent(A.Dummy <UtcDateTime>(), A.Dummy <string>(), A.Dummy <string>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new CellValidationDeterminedCellInvalidEvent(A.Dummy <UtcDateTime>(), A.Dummy <string>(), A.Dummy <string>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new CellValidationDeterminedCellValidEvent(A.Dummy <UtcDateTime>(), A.Dummy <string>(), A.Dummy <string>());

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(() =>
            {
                var result = new CellValidationFailedEvent(A.Dummy <UtcDateTime>(), A.Dummy <string>());

                return(result);
            });
        }
Пример #21
0
 public void SymbolShouldTrowExceptionInputContainsInvalidSymbols()
 {
     Assert.Throws <ArgumentException>(() => InputCell.Symbol("$"));
     Assert.Throws <ArgumentException>(() => InputCell.Symbol("1"));
     Assert.Throws <ArgumentException>(() => InputCell.Symbol("a"));
 }
Пример #22
0
 public void IsOperationShouldReturnFalse()
 {
     Assert.IsFalse(InputCell.Symbol("(").IsOperation());
     Assert.IsFalse(InputCell.Symbol(")").IsOperation());
 }
Пример #23
0
 public void IsNumberShouldReturnFalse()
 {
     Assert.IsFalse(InputCell.Symbol(")").IsNumber());
 }
Пример #24
0
    private List <GridObject> SolveGate(Gate _gate, List <GridObject> _checkedObjects)
    {
        List <GridObject> ret = new List <GridObject> {
            _gate
        };

        GridObject[] inputs         = new GridObject[_gate.Inputs.Length];
        bool         ready          = true;
        int          numReadyInputs = inputs.Length;

        bool[] readyInputs = new bool[_gate.Inputs.Length];
        for (uint i = 0; i < inputs.Length; ++i)
        {
            // Check if all inputs have been solved
            inputs[i] = GetCell(_gate.Inputs[i]);
            if (!_checkedObjects.Contains(inputs[i]))
            {
                ready          = false;
                readyInputs[i] = false;
                numReadyInputs--;
                continue;
            }
            // Check if the output of this input actually aligns with us...
            switch (inputs[i].ObjectType)
            {
            case GridObjectType.Gate:
            {
                Gate gate = (Gate)inputs[i];
                ready = false;
                for (uint j = 0; j < gate.Outputs.Length; ++j)
                {
                    if (gate.Outputs[j] == _gate.GetCoordinateForInput(i))
                    {
                        ready = true;
                        break;
                    }
                }
                break;
            }

            case GridObjectType.Input:
            {
                InputCell input = (InputCell)inputs[i];
                ready = input.Exit == _gate.GetCoordinateForInput(i);
                break;
            }

            case GridObjectType.Wire:
            {
                Wire wire = (Wire)inputs[i];
                ready = wire.Exit == _gate.GetCoordinateForInput(i);
                break;
            }

            default:
            {
                Debug.LogError("GridManager: SolveOutput encountered an invalid GridObjectType at " + _gate.Inputs[i] + " !");
                ready = false;
                break;
            }
            }
            if (!ready)
            {
                numReadyInputs--;
                readyInputs[i] = false;
                continue;
            }

            readyInputs[i] = true;
        }
        if (numReadyInputs == inputs.Length || (_gate.Type == GateType.Cross && numReadyInputs > 0))
        {
            int[] inputValues = new int[inputs.Length];
            for (uint i = 0; i < inputs.Length; ++i)
            {
                // Get value for coordinate which depepnds on which input we are getting
                if (readyInputs[i])
                {
                    inputValues[i] = inputs[i].GetValueForCoordinate(_gate.GetCoordinateForInput(i));
                }
            }
            // Actually perform the operation
            _gate.DoOperation(inputValues, readyInputs, numReadyInputs);

            ret = new List <GridObject>();
            for (uint i = 0; i < _gate.Outputs.Length; ++i)
            {
                if (_gate.Type != GateType.Cross || readyInputs[i])
                {
                    // Need to solve all outputs next (cross can only solve outputs it has readyInputs for!)
                    GridObject output = GetCell(_gate.Outputs[i]);
                    if (output != null)
                    {
                        ret.Add(output);
                    }
                }
            }
        }
        return(ret.Count != 0 ? ret : null);
    }