public void ParseLinguisticVariable_ReturnsCorrectLinguisticVariableString_WithTwoVariables()
        {
            // Arrange
            var membershipFunction = "Cold:Trapezoidal:(0,20,20,30)|Hot:Trapezoidal(50,60,60,80)";
            var linguisticVariable = $"[Water,NotWater]:Initial:[{membershipFunction}]";
            var expectedMembershipFunctionStringsList = new List <MembershipFunctionStrings>
            {
                new MembershipFunctionStrings("Cold", "Trapezoidal", new List <double> {
                    0, 20, 20, 30
                }),
                new MembershipFunctionStrings("Hot", "Trapezoidal", new List <double> {
                    50, 60, 60, 80
                })
            };
            var firstExpectedLinguisticVariableStrings  = new LinguisticVariableStrings("Water", "Initial", expectedMembershipFunctionStringsList);
            var secondExpectedLinguisticVariableStrings = new LinguisticVariableStrings("NotWater", "Initial", expectedMembershipFunctionStringsList);

            _membershipFunctionParserMock.Stub(x => x.ParseMembershipFunctions(membershipFunction)).Return(expectedMembershipFunctionStringsList);

            // Act
            var actualLinguisticVariableStringsList = _linguisticVariableParser.ParseLinguisticVariable(linguisticVariable);

            // Assert
            Assert.AreEqual(2, actualLinguisticVariableStringsList.Count);
            Assert.IsTrue(ObjectComparer.LinguisticVariableStringsAreEqual(firstExpectedLinguisticVariableStrings, actualLinguisticVariableStringsList[0]));
            Assert.IsTrue(ObjectComparer.LinguisticVariableStringsAreEqual(secondExpectedLinguisticVariableStrings, actualLinguisticVariableStringsList[1]));
        }
        private LinguisticVariable CreateLinguisticVariableEntity(LinguisticVariableStrings linguisticVariableStrings)
        {
            var isInitial           = linguisticVariableStrings.DataOrigin.ToEnum <DataOriginType>() == DataOriginType.Initial;
            var membershipFunctions = new MembershipFunctionList();

            foreach (var membershipFunctionStrings in linguisticVariableStrings.MembershipFunctions)
            {
                var functionType       = membershipFunctionStrings.MembershipFunctionType.ToEnum <MembershipFunctionType>();
                var membershipFunction = _membershipFunctionCreator.CreateMembershipFunctionEntity(
                    functionType, membershipFunctionStrings.MembershipFunctionName, membershipFunctionStrings.MembershipFunctionValues);
                membershipFunctions.Add(membershipFunction);
            }
            return(new LinguisticVariable(linguisticVariableStrings.VariableName, membershipFunctions, isInitial));
        }
        public void CreateLinguisticVariableEntity_ReturnsCorrectLinguisticVariable()
        {
            // Arrange
            List <double> firstFunctionValues = new List <double> {
                0, 20, 20, 30
            };
            List <double> secondFunctionValues = new List <double> {
                50, 60, 60, 80
            };
            List <MembershipFunctionStrings> membershipFunctionStringsList = new List <MembershipFunctionStrings>
            {
                new MembershipFunctionStrings("Cold", "Trapezoidal", firstFunctionValues),
                new MembershipFunctionStrings("Hot", "Trapezoidal", secondFunctionValues)
            };
            string linguisticVariable            = "Water:Initial:[Cold:Trapezoidal:(0,20,20,30)|Hot:Trapezoidal:(50,60,60,80)]";
            var    linguisticVariableStrings     = new LinguisticVariableStrings("Water", "Initial", membershipFunctionStringsList);
            var    linguisticVariableStringsList = new List <LinguisticVariableStrings> {
                linguisticVariableStrings
            };

            _linguisticVariableParserMock.Expect(x => x.ParseLinguisticVariable(linguisticVariable)).Return(linguisticVariableStringsList);

            var firstMembershipFunction  = new TrapezoidalMembershipFunction("Cold", 0, 20, 20, 30);
            var secondMembershipFunction = new TrapezoidalMembershipFunction("Hot", 50, 60, 60, 80);

            _membershipFunctionCreatorMock.Expect(x => x.CreateMembershipFunctionEntity(MembershipFunctionType.Trapezoidal, "Cold", firstFunctionValues))
            .Return(firstMembershipFunction);
            _membershipFunctionCreatorMock.Expect(x => x.CreateMembershipFunctionEntity(MembershipFunctionType.Trapezoidal, "Hot", secondFunctionValues))
            .Return(secondMembershipFunction);

            var expectedLinguisticVariable = new LinguisticVariable(
                "Water",
                new MembershipFunctionList {
                firstMembershipFunction, secondMembershipFunction
            },
                true);

            // Act
            var actualLinguisticVariables = _linguisticVariableCreator.CreateLinguisticVariableEntities(linguisticVariable);

            // Assert
            Assert.AreEqual(1, actualLinguisticVariables.Count);
            Assert.IsTrue(ObjectComparer.LinguisticVariablesAreEqual(expectedLinguisticVariable, actualLinguisticVariables[0]));
        }
        public static bool LinguisticVariableStringsAreEqual(
            LinguisticVariableStrings linguisticVariableStringsToCompare,
            LinguisticVariableStrings linguisticVariableStringsToCompareWith)
        {
            if (linguisticVariableStringsToCompare.MembershipFunctions.Count != linguisticVariableStringsToCompareWith.MembershipFunctions.Count)
            {
                return(false);
            }

            for (int i = 0; i < linguisticVariableStringsToCompare.MembershipFunctions.Count; i++)
            {
                if (!MembershipFunctionStringsAreEqual(
                        linguisticVariableStringsToCompare.MembershipFunctions[i],
                        linguisticVariableStringsToCompareWith.MembershipFunctions[i]))
                {
                    return(false);
                }
            }

            return(linguisticVariableStringsToCompare.VariableName == linguisticVariableStringsToCompareWith.VariableName &&
                   linguisticVariableStringsToCompare.DataOrigin == linguisticVariableStringsToCompareWith.DataOrigin);
        }
 public void SetUp()
 {
     _linguisticVariableStrings = new LinguisticVariableStrings(VariableName, DataOrigin, _membershipFunctions);
 }