Exemplo n.º 1
0
        public void SaveProfile_GetProfileByName_ExpectedBehaviorForOneProfile()
        {
            // Arrange
            var profile = new InferenceProfile
            {
                ProfileName = "ProjectSelection",
                Rules       = new List <string>
                {
                    "IF A=1 THEN B=2",
                    "IF B=2 THEN C=3"
                },
                Variables = new List <string>
                {
                    "A:Initial:[1|2|3]", "B:Derivative:[1|2|3]", "C:Derivative:[1|2|3]"
                }
            };

            // Act
            var result = _profileRepository.SaveProfile(profile);
            var profileFromDatabase = _profileRepository.GetProfileByName(profile.ProfileName);

            // Assert
            Assert.IsTrue(result);
            Assert.IsTrue(File.Exists(_databaseFilename));
            Assert.IsTrue(profileFromDatabase.IsPresent);
            Assert.AreEqual(profile.ProfileName, profileFromDatabase.Value.ProfileName);
            Assert.AreEqual(2, profileFromDatabase.Value.Rules.Count);
            Assert.AreEqual(3, profileFromDatabase.Value.Variables.Count);
        }
Exemplo n.º 2
0
        private void PrepareProfileRepository()
        {
            _profileRepository = new ProfileRepository(new ConnectionStringProvider());
            var profile = new InferenceProfile
            {
                ProfileName = _profileName,
                Rules       = new List <string>
                {
                    "IF(Temperature=HOT)THEN(Pressure=HIGH)",
                    "IF(Volume=BIG&Color=RED)THEN(Danger=HIGH)",
                    "IF(Pressure=HIGH&Danger=HIGH)THEN(Evacuate=TRUE)"
                },
                Variables = new List <string>
                {
                    "[Temperature]:Initial:[Cold:Trapezoidal:(0,20,20,30)|HOT:Trapezoidal:(50,60,60,80)]",
                    "[Pressure]:Derivative:[Low: Trapezoidal:(20, 50, 50, 60) | HIGH:Trapezoidal: (80, 100, 100, 150)]",
                    "[Volume]:Initial:[Small:Trapezoidal:(100,200,200,600)|BIG:Trapezoidal:(800,1000,1100,1500)]",
                    "[Color]:Initial:[Blue:Trapezoidal:(5,10,10,20)|RED:Trapezoidal:(50,60,65,80)]",
                    "[Danger]:Derivative:[Low:Trapezoidal:(5,10,10,20)|HIGH:Trapezoidal:(50,60,60,80)]",
                    "[Evacuate]:Derivative:[TRUE:Trapezoidal:(5,10,10,20)|False:Trapezoidal:(50,60,60,80)]"
                }
            };

            _profileRepository.SaveProfile(profile);
        }
Exemplo n.º 3
0
        public void DeleteProfile_DeletesCreatedProfile()
        {
            // Arrange
            var profile = new InferenceProfile
            {
                ProfileName = "ProjectSelection",
                Rules       = new List <string>
                {
                    "IF A=1 THEN B=2",
                    "IF B=2 THEN C=3"
                },
                Variables = new List <string>
                {
                    "A:Initial:[1|2|3]", "B:Derivative:[1|2|3]", "C:Derivative:[1|2|3]"
                }
            };

            // Act
            var result = _profileRepository.SaveProfile(profile);
            var entitiesDeletedCount = _profileRepository.DeleteProfile(profile.ProfileName);
            var notExistingProfile   = _profileRepository.GetProfileByName(profile.ProfileName);

            // Assert
            Assert.IsTrue(result);
            Assert.IsTrue(File.Exists(_databaseFilename));
            Assert.AreEqual(1, entitiesDeletedCount);
            Assert.IsFalse(notExistingProfile.IsPresent);
        }
Exemplo n.º 4
0
 public bool SaveProfile(InferenceProfile item)
 {
     using (var repository = new LiteRepository(_connectionStringProvider.ConnectionString))
     {
         return(repository.Upsert(item));
     }
 }
Exemplo n.º 5
0
        public void GetLinguisticVariables_ReturnsCorrectListOfVariables()
        {
            // Arrange
            var firstLinguisticVariableStringFromFile  = "[Water]:Initial:[Cold:Trapezoidal:(0,20,20,30)|Hot:Trapezoidal:(50,60,60,80)]";
            var secondLinguisticVariableStringFromFile = "[Pressure]:Derivative:[Low:Trapezoidal:(20,50,50,60)|High:Trapezoidal:(80,100,100,150)]";
            var linguisticVariablesInDatabase          = new List <string>
            {
                firstLinguisticVariableStringFromFile, secondLinguisticVariableStringFromFile
            };
            var profileName = "profile_name";
            var profile     = new InferenceProfile
            {
                ProfileName = profileName,
                Variables   = linguisticVariablesInDatabase
            };

            _profileRepositoryMock.Stub(x => x.GetProfileByName(profileName)).Return(Optional <InferenceProfile> .For(profile));

            // Water variable
            var firstMembershipFunctionList = new MembershipFunctionList
            {
                new TrapezoidalMembershipFunction("Cold", 0, 20, 20, 30),
                new TrapezoidalMembershipFunction("Hot", 50, 60, 60, 80)
            };
            var firstLinguisticVariable  = new LinguisticVariable("Water", firstMembershipFunctionList, isInitialData: true);
            var firstLinguisticVariables = new List <LinguisticVariable> {
                firstLinguisticVariable
            };

            // Pressure variable
            var secondsMembershipFunctionList = new MembershipFunctionList
            {
                new TrapezoidalMembershipFunction("Low", 20, 50, 50, 60),
                new TrapezoidalMembershipFunction("High", 80, 100, 100, 150)
            };
            var secondLinguisticVariable  = new LinguisticVariable("Pressure", secondsMembershipFunctionList, isInitialData: false);
            var secondLinguisticVariables = new List <LinguisticVariable> {
                secondLinguisticVariable
            };

            var expectedLinguisticVariables = new List <LinguisticVariable>
            {
                firstLinguisticVariable, secondLinguisticVariable
            };
            var expectedOptional = Optional <List <LinguisticVariable> > .For(expectedLinguisticVariables);

            // Stubs
            _linguisticVariableCreatorMock.Stub(x => x.CreateLinguisticVariableEntities(firstLinguisticVariableStringFromFile)).Return(firstLinguisticVariables);
            _linguisticVariableCreatorMock.Stub(x => x.CreateLinguisticVariableEntities(secondLinguisticVariableStringFromFile)).Return(secondLinguisticVariables);

            // Act
            var actualOptional = _databaseLinguisticVariableProvider.GetLinguisticVariables(profileName);

            // Assert
            Assert.IsTrue(expectedOptional.IsPresent);
            Assert.AreEqual(expectedOptional.Value, actualOptional.Value);
        }
Exemplo n.º 6
0
        private void PrepareProfileRepository()
        {
            _profileRepository = new ProfileRepository(new ConnectionStringProvider());
            var profile = new InferenceProfile
            {
                ProfileName = _profileName,
                Variables   = new List <string>
                {
                    "[Water]:Initial:[Cold:Trapezoidal:(0,20,20,30)|Hot:Trapezoidal:(50,60,60,80)]",
                    "[Pressure]:Derivative:[Low:Trapezoidal:(20,50,50,60)|High:Trapezoidal:(80,100,100,150)]"
                }
            };

            _profileRepository.SaveProfile(profile);
        }
        private void PrepareProfileRepository()
        {
            _profileRepository = new ProfileRepository(new ConnectionStringProvider());
            var profile = new InferenceProfile
            {
                ProfileName = _profileName,
                Rules       = new List <string>
                {
                    "IF(A>10)THEN(X=5)",
                    "IF(B!=1&C!=2)THEN(X=10)",
                    "IF((A=5|B=10)&C=6)THEN(X=7)"
                }
            };

            _profileRepository.SaveProfile(profile);
        }
        public void GetImplicationRules_ReturnsEmptyOptional_IfTProfileHasNoRules()
        {
            // Arrange
            var profileName        = "profile_name";
            var profileWithNoRules = new InferenceProfile
            {
                ProfileName = profileName
            };

            _profileRepositoryMock.Stub(x => x.GetProfileByName(profileName)).Return(Optional <InferenceProfile> .For(profileWithNoRules));

            // Act
            Optional <List <ImplicationRule> > expectedImplicationRules = _databaseImplicationRuleProvider.GetImplicationRules(profileName);

            // Assert
            Assert.IsFalse(expectedImplicationRules.IsPresent);
        }
Exemplo n.º 9
0
        public void SaveProfile_GetProfiles_ExpectedBehaviorForMultipleProfiles()
        {
            // Arrange
            var firstProfile = new InferenceProfile
            {
                ProfileName = "ProjectSelection",
                UserName    = "******",
                Rules       = new List <string>
                {
                    "IF A=1 THEN B=2",
                    "IF B=2 THEN C=3"
                },
                Variables = new List <string>
                {
                    "A:Initial:[1|2|3]", "B:Derivative:[1|2|3]", "C:Derivative:[1|2|3]"
                }
            };
            var secondProfile = new InferenceProfile
            {
                ProfileName = "BusinessCaseCreation",
                UserName    = "******",
                Rules       = new List <string>
                {
                    "IF A=1 THEN B=2",
                    "IF B=2 THEN C=3"
                },
                Variables = new List <string>
                {
                    "A:Initial:[1|2|3]", "B:Derivative:[1|2|3]", "C:Derivative:[1|2|3]"
                }
            };

            // Act
            var firstSaveResult      = _profileRepository.SaveProfile(firstProfile);
            var secondSaveResult     = _profileRepository.SaveProfile(secondProfile);
            var profilesFromDatabase = _profileRepository.GetProfilesForUser(firstProfile.UserName);

            // Assert
            Assert.IsTrue(firstSaveResult);
            Assert.IsTrue(secondSaveResult);
            Assert.IsTrue(File.Exists(_databaseFilename));
            Assert.IsTrue(profilesFromDatabase.IsPresent);
            Assert.AreEqual(2, profilesFromDatabase.Value.ToList().Count);
            Assert.AreEqual(firstProfile.ProfileName, profilesFromDatabase.Value.ToList()[1].ProfileName);
            Assert.AreEqual(secondProfile.ProfileName, profilesFromDatabase.Value.ToList()[0].ProfileName);
        }
Exemplo n.º 10
0
        public void SaveProfile_UpdatesAlreadyExistingProfile()
        {
            // Arrange
            var profile = new InferenceProfile
            {
                ProfileName = "ProjectSelection",
                UserName    = "******",
                Rules       = new List <string>
                {
                    "IF A=1 THEN B=2",
                    "IF B=2 THEN C=3"
                },
                Variables = new List <string>
                {
                    "A:Initial:[1|2|3]", "B:Derivative:[1|2|3]", "C:Derivative:[1|2|3]"
                }
            };
            var firstResult = _profileRepository.SaveProfile(profile);

            profile.Rules.Add("IF C=3 THEN D=4");

            // Act
            var secondResult = _profileRepository.SaveProfile(profile);
            var updatedProfileFromDatabase = _profileRepository.GetProfileByName(profile.ProfileName);
            var profilesFromDatabase       = _profileRepository.GetProfilesForUser(profile.UserName);

            // Assert
            Assert.IsTrue(firstResult);   // LiteDB Upsert returns TRUE if INSERTED
            Assert.IsFalse(secondResult); // LiteDB Upsert returns FALSE if UPDATED
            Assert.IsTrue(File.Exists(_databaseFilename));
            Assert.IsTrue(updatedProfileFromDatabase.IsPresent);
            Assert.IsTrue(profilesFromDatabase.IsPresent);
            Assert.AreEqual(1, profilesFromDatabase.Value.ToList().Count);
            Assert.AreEqual(profile.ProfileName, updatedProfileFromDatabase.Value.ProfileName);
            Assert.AreEqual(profile.UserName, updatedProfileFromDatabase.Value.UserName);
            Assert.AreEqual(3, updatedProfileFromDatabase.Value.Rules.Count);
        }
Exemplo n.º 11
0
        public void SaveProfile_AddsAnotherProfile_IfProfileNameIsChanged()
        {
            // Arrange
            string oldProfileName = "ProjectSelection";
            string newProfileName = "ProjectSelection#2";
            var    profile        = new InferenceProfile
            {
                ProfileName = oldProfileName,
                Rules       = new List <string>
                {
                    "IF A=1 THEN B=2",
                    "IF B=2 THEN C=3"
                },
                Variables = new List <string>
                {
                    "A:Initial:[1|2|3]", "B:Derivative:[1|2|3]", "C:Derivative:[1|2|3]"
                }
            };
            var firstResult = _profileRepository.SaveProfile(profile);

            profile.ProfileName = newProfileName;

            // Act
            var secondResult              = _profileRepository.SaveProfile(profile);
            var firstProfileFromDatabase  = _profileRepository.GetProfileByName(newProfileName);
            var secondProfileFromDatabase = _profileRepository.GetProfileByName(oldProfileName);

            // Assert
            Assert.IsTrue(firstResult);
            Assert.IsTrue(secondResult);
            Assert.IsTrue(File.Exists(_databaseFilename));
            Assert.IsTrue(firstProfileFromDatabase.IsPresent);
            Assert.IsTrue(secondProfileFromDatabase.IsPresent);
            Assert.AreEqual(newProfileName, firstProfileFromDatabase.Value.ProfileName);
            Assert.AreEqual(oldProfileName, secondProfileFromDatabase.Value.ProfileName);
        }
        public void GetImplicationRules_ReturnsCorrectListOfRules()
        {
            // Arrange

            var firstImplicationRuleString  = "IF(A>10)THEN(X=5)";
            var secondImplicationRuleString = "IF(B!=1&C!=2)THEN(X=10)";
            var implicationRulesInDatabase  = new List <string>
            {
                firstImplicationRuleString, secondImplicationRuleString
            };
            var profileName = "profile_name";
            var profile     = new InferenceProfile
            {
                ProfileName = profileName,
                Rules       = implicationRulesInDatabase
            };

            _profileRepositoryMock.Stub(x => x.GetProfileByName(profileName)).Return(Optional <InferenceProfile> .For(profile));

            // IF (A > 10) THEN (X = 5)
            var firstImplicationRule = new ImplicationRule(
                new List <StatementCombination>
            {
                new StatementCombination(new List <UnaryStatement>
                {
                    new UnaryStatement("A", ComparisonOperation.Greater, "10")
                })
            },
                new StatementCombination(new List <UnaryStatement>
            {
                new UnaryStatement("X", ComparisonOperation.Equal, "5")
            }));

            _implicationRuleCreatorMock.Stub(x => x.CreateImplicationRuleEntity(firstImplicationRuleString)).Return(firstImplicationRule);

            // IF (B != 1 & C != 2) THEN (X = 10)
            var secondImplicationRule = new ImplicationRule(
                new List <StatementCombination>
            {
                new StatementCombination(new List <UnaryStatement>
                {
                    new UnaryStatement("B", ComparisonOperation.NotEqual, "1"),
                    new UnaryStatement("C", ComparisonOperation.NotEqual, "2")
                })
            },
                new StatementCombination(new List <UnaryStatement>
            {
                new UnaryStatement("X", ComparisonOperation.Equal, "10")
            }));

            _implicationRuleCreatorMock.Stub(x => x.CreateImplicationRuleEntity(secondImplicationRuleString)).Return(secondImplicationRule);

            var expectedImplicationRules = new List <ImplicationRule>
            {
                firstImplicationRule, secondImplicationRule
            };
            var expectedOptional = Optional <List <ImplicationRule> > .For(expectedImplicationRules);

            // Act
            var actualOptional = _databaseImplicationRuleProvider.GetImplicationRules(profileName);

            // Assert
            Assert.IsTrue(actualOptional.IsPresent);
            Assert.AreEqual(expectedOptional.Value, actualOptional.Value);
        }
 public void SetUp()
 {
     _inferenceProfile = new InferenceProfile();
 }