public void TriangleFilter2() { var filter = new FilterSample(new IOconfFilter("Filter;MyFilter;Triangle;1;X", 0)); var now = DateTime.Now; filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.1) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.2) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.3) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.4) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.5) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.6) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.7) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.8) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 4) { TimeStamp = now.AddSeconds(0.9) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.1) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.2) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.3) } }); var result = filter.Output.Value; Assert.IsTrue(Math.Abs(3.727272727d - result) < 0.0000001, $"{result} - {now:o}"); }
public void TriangleFilterHandlesTimeAverageWithoutPrecisionLoss() { // this test is a stable reproduction of an issue reproduced by test 2 that only happens with some dates, resulting in a wrong value in the original test var filter = new FilterSample(new IOconfFilter("Filter;MyFilter;Triangle;1;X", 0)); var now = DateTime.ParseExact("2020-12-04T18:34:53.2064482+01:00", "o", Thread.CurrentThread.CurrentCulture); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.1) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.2) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.3) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.4) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.5) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.6) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.7) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.8) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 4) { TimeStamp = now.AddSeconds(0.9) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.1) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.2) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.3) } }); var result = filter.Output.Value; Assert.IsTrue(Math.Abs(3.727272727d - result) < 0.0000001, $"{result}"); }
public void TriangleFilterHandlesManySamples() { // this test is to detect issues with averaging dates when having many samples var filter = new FilterSample(new IOconfFilter("Filter;MyFilter;Triangle;1;X", 0)); var now = DateTime.Now; filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.1) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.2) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.3) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.4) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.5) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.6) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.7) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 3) { TimeStamp = now.AddSeconds(0.8) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 4) { TimeStamp = now.AddSeconds(0.9) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.0) }, }); filter.Input(new List <SensorSample>() { new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.1) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.2) } }); filter.Input(new List <SensorSample>() { new SensorSample("X", 4) { TimeStamp = now.AddSeconds(1.3) } }); var result = filter.Output.Value; Assert.IsTrue(Math.Abs(3.727272727d - result) < 0.0000001, $"{result}"); }
// GET: Samples2 public async Task <IActionResult> Index(FilterSample filter, int?sampleId, int pageNum = 1) { var filterSampleLogic = new FilterSampleLogic(_context); var queryModel = filterSampleLogic.GetSamples(filter); //creates a list of Burial with Burial IDs (so we can link them in the view) ViewBag.MasterBurialList = _context.MasterBurial2 .Where(c => c.BurialId != null) .ToList(); //check to see if user is admin var isAdmin = _context.AspNetUsers .Where(c => c.UserName == User.Identity.Name); foreach (var thing in isAdmin) { if (thing.isAdmin == true) { ViewData["isAdmin"] = true; } } //check to see if user is researcher var isResearcher = _context.AspNetUsers .Where(c => c.UserName == User.Identity.Name); foreach (var thing in isResearcher) { if (thing.isResearcher == true) { ViewData["isResearcher"] = true; } } //pageSize raised to enable the use of jquery tables int pageSize = 10000; int skip = 0; //used for asp.net pagination if (pageNum - 1 < 0) { skip = 0; } else { skip = (pageNum - 1) * pageSize; } return(View(new PaginationViewModel { Samples = (queryModel //.Where(c => c.SampleId == sampleId || sampleId == null) .Skip(skip) .Take(pageSize) .ToList()), PageNumberingInfo = new PageNumberingInfo { NumItemsPerPage = pageSize, CurrentPage = pageNum, TotalNumItems = (sampleId == null ? queryModel.Count() : queryModel.Where(x => x.SampleId == sampleId).Count()) }, UrlInfo = Request.QueryString.Value })); //var waterbuffaloContext = _context.Samples2.Include(s => s.Burial); //return View(await waterbuffaloContext.ToListAsync()); }