Exemple #1
0
        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);
        }
Exemple #2
0
        /// <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}");
            }
        }
Exemple #3
0
    public S Get <S>()
    {
        var result = LibraRequest.Post <S>(_callMode);

        return(result == null ? default : result.Value);
    }
Exemple #4
0
        public void GetKeyTest(string signal, double time)
        {
            var t = (decimal)time;

            Assert.Equal($"{signal}/{t:E5}", LibraRequest.GetKey(signal, t));
        }
Exemple #5
0
 public LibraOption SetBaseUrl(string url)
 {
     LibraRequest.SetBaseUrl(url);
     return(this);
 }