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); }
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)))); }
public static Change CreateFrom(IItemDatabase database, LogRowKey key, int maxDepth) { Change result = ParseChange(database, key, 0, maxDepth); return(result); }
public Change(LogRowKey key, ExpressionParser.ParseResult result, IEnumerable <Change> states) { Key = key; Result = result; States = states; }
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); }