public void AggregateTest() { var entities = new List <ResultEntity>(); var r = new Random(DateTime.Now.Millisecond); for (var i = 0; i < 100; i++) { entities.Add(new ResultEntity { Sweep = i + 1, Seed = i % 3, Signal = i % 2 == 0 ? "A" : "B", Time = i % 2, Value = r.Next() }); } var tmp = Path.Combine(Path.GetTempPath(), "Ptolemy.Lib.RepositoryTest_AggregateTest"); var sqlite = Path.Combine(tmp, "sqlite.db"); Directory.CreateDirectory(tmp); using var repo = new SqliteRepository(sqlite); repo.BulkUpsert(entities); var ds = new List <Func <Map <string, decimal>, bool> > { m => m[LibraRequest.GetKey("A", 1)] <= r.Next(), m => m[LibraRequest.GetKey("B", 0)] >= r.Next(), m => m[LibraRequest.GetKey("A", 1)] > r.Next(), m => m[LibraRequest.GetKey("B", 0)] < r.Next() }; var filtered = entities.Where(s => s.Signal == "A" || s.Signal == "B") .Where(s => 1 <= s.Seed && s.Seed <= 2) .Where(s => 20 <= s.Sweep && s.Sweep <= 50) .AsEnumerable() .GroupBy(x => new { x.Sweep, x.Seed }) .Select(g => g.ToMap(k => LibraRequest.GetKey(k.Signal, k.Time), v => v.Value)) .ToList(); var expect = new long[ds.Count]; foreach (var item in ds.Select((d, i) => new { d, i })) { expect[item.i] = filtered.Count(item.d); } var actual = repo.Aggregate(new List <string> { "A", "B" }, (1, 2), (20, 50), ds, LibraRequest.GetKey, CancellationToken.None); Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreEquivalent( expect, actual ); Directory.Delete(tmp, true); }
/// <summary> /// requestに従って数え上げる /// </summary> /// <returns>Expression,結果のペアリスト</returns> public Tuple <string, long>[] Run(LibraRequest request) { try { var delegates = request.BuildFilter(); var signals = request.SignalList; if (!signals.Any()) { throw new LibraException("Conditions have no signals"); } var db = new ReadOnlyRepository(request.SqliteFile); log.Info("----Parameter Info----"); Console.WriteLine(db.GetParameter()); log.Info("----------------------"); using var bar = new ProgressBar( (int)(request.IsSplitWithSeed ? (request.SeedEnd - request.SeedStart + 1) : request.Sweeps.Times), "Ptolemy.Libra", new ProgressBarOptions { ForegroundColor = ConsoleColor.DarkYellow, BackgroundCharacter = '-', ProgressCharacter = '>', CollapseWhenFinished = true, BackgroundColor = ConsoleColor.Gray, ForegroundColorDone = ConsoleColor.Green }); db.IntervalEvent += () => bar.Tick(); var result = request.IsSplitWithSeed switch { true => db.Aggregate(token, signals, delegates, Range(request.SeedStart, request.SeedEnd).ToList(), request.Sweeps.Size, request.Sweeps.Start, LibraRequest.GetKey), false => db.Aggregate(token, signals, delegates, request.SeedStart, request.Sweeps.Section().ToList(), LibraRequest.GetKey) }; return(request.ExpressionNameList.Zip(result, Tuple.Create).ToArray()); } catch (LibraException) { throw; } catch (Exception e) { throw new LibraException($"Unknown error has occured\n\t-->{e}"); } }
public S Get <S>() { var result = LibraRequest.Post <S>(_callMode); return(result == null ? default : result.Value); }
public void GetKeyTest(string signal, double time) { var t = (decimal)time; Assert.Equal($"{signal}/{t:E5}", LibraRequest.GetKey(signal, t)); }
public LibraOption SetBaseUrl(string url) { LibraRequest.SetBaseUrl(url); return(this); }