Esempio n. 1
0
        public void FindClosestRowKeyTest()
        {
            var itemDatabase = Substitute.For <IItemDatabase>();

            var triggerIds = new[]
            {
                new KeyValuePair <string, long[]>("Key1", new long[] { 1, 3, 6 }),
                new KeyValuePair <string, long[]>("Key2", new long[] { 2, 4, 7 })
            };

            itemDatabase.GetLogRowUniqueID(triggerIds[0].Key).Returns(triggerIds[0].Value);
            itemDatabase.GetLogRowUniqueID(triggerIds[1].Key).Returns(triggerIds[1].Value);
            itemDatabase.GetItemRow(triggerIds[0].Key, 1).Returns(callInfo =>
                                                                  new LogRowData(DateTime.UtcNow, triggerIds[0].Key, "", callInfo.ArgAt <long>(0) * 10, String.Empty));
            itemDatabase.GetItemRow(triggerIds[0].Key, 3).Returns(callInfo =>
                                                                  new LogRowData(DateTime.UtcNow, triggerIds[0].Key, "", callInfo.ArgAt <long>(0) * 10, String.Empty));
            itemDatabase.GetItemRow(triggerIds[0].Key, 6).Returns(callInfo =>
                                                                  new LogRowData(DateTime.UtcNow, triggerIds[0].Key, "", callInfo.ArgAt <long>(0) * 10, String.Empty));

            LogRowKey key = itemDatabase.FindClosestRowKey(5, 50, triggerIds[0].Key, triggerIds[0].Value);

            key = itemDatabase.FindClosestRowKey(5, 60, triggerIds[0].Key, triggerIds[0].Value);

            Assert.AreEqual(3, key.UniqueId);
        }
Esempio n. 2
0
        private static Change ParseChange(IItemDatabase database, LogRowKey key, int depth, int maxDepth)
        {
            if (depth == maxDepth)
            {
                return(null);
            }

            (IEnumerable <LogRowKey>, ExpressionParser.ParseResult)triggers = ParseExpression(database, key);

            return(new Change(key, triggers.Item2, triggers.Item1.Where(p => p != null).Select(p => ParseChange(database, p, depth + 1, maxDepth))));
        }
Esempio n. 3
0
        public static Change CreateFrom(IItemDatabase database, LogRowKey key, int maxDepth)
        {
            Change result = ParseChange(database, key, 0, maxDepth);

            return(result);
        }
Esempio n. 4
0
 public Change(LogRowKey key, ExpressionParser.ParseResult result, IEnumerable <Change> states)
 {
     Key    = key;
     Result = result;
     States = states;
 }
Esempio n. 5
0
        private static (IEnumerable <LogRowKey>, ExpressionParser.ParseResult) ParseExpression(IItemDatabase database, LogRowKey source)
        {
            ExpressionParser.ParseResult parseResult = ExpressionParser.ParseExpression(source.Data.User);
            if (parseResult != null)
            {
                IEnumerable <string> triggerItems = ExpressionParser.FindItems(parseResult, database.Exists).Distinct();

                return(database.FindClosestTriggerKeys(source.UniqueId, source.Data.CycleIndex, triggerItems), parseResult);
            }

            return(new LogRowKey[0], parseResult);
        }