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
        public void GetKeyTest(string signal, double time)
        {
            var t = (decimal)time;

            Assert.Equal($"{signal}/{t:E5}", LibraRequest.GetKey(signal, t));
        }