/// <summary> /// Generates a new Partition Key value for the record /// </summary> /// <returns>Partition Key value</returns> public static string GetPartitionKey(Region region) { int lat = (int)PrecisionHelper.Round(region.LatitudePrefix, 0); int lon = (int)PrecisionHelper.Round(region.LongitudePrefix, 0); return($"{lat},{lon}"); }
public void Test3(float value, int expectedNumbers) { //Act var result = PrecisionHelper.NumbersAfterDot(value); //Assert Assert.AreEqual(expectedNumbers, result); }
public void StepTest() { Assert.AreEqual(1.0, PrecisionHelper.GetStep(0)); Assert.AreEqual(0.5, PrecisionHelper.GetStep(1)); Assert.AreEqual(0.25, PrecisionHelper.GetStep(2)); Assert.AreEqual(0.125, PrecisionHelper.GetStep(3)); Assert.AreEqual(0.0625, PrecisionHelper.GetStep(4)); Assert.AreEqual(2.0, PrecisionHelper.GetStep(-1)); Assert.AreEqual(4.0, PrecisionHelper.GetStep(-2)); Assert.AreEqual(8.0, PrecisionHelper.GetStep(-3)); Assert.AreEqual(16.0, PrecisionHelper.GetStep(-4)); }
public void GetRangeTest() { Assert.AreEqual(Tuple.Create(7, 8), PrecisionHelper.GetRange(7, 8)); Assert.AreEqual(Tuple.Create(6, 8), PrecisionHelper.GetRange(7, 7)); Assert.AreEqual(Tuple.Create(4, 8), PrecisionHelper.GetRange(7, 6)); Assert.AreEqual(Tuple.Create(-8, 8), PrecisionHelper.GetRange(7, 5)); Assert.AreEqual(Tuple.Create(-16, 16), PrecisionHelper.GetRange(7, 4)); Assert.AreEqual(Tuple.Create(-32, 32), PrecisionHelper.GetRange(7, 3)); Assert.AreEqual(Tuple.Create(-64, 64), PrecisionHelper.GetRange(7, 2)); Assert.AreEqual(Tuple.Create(-128, 128), PrecisionHelper.GetRange(7, 1)); Assert.AreEqual(Tuple.Create(-256, 256), PrecisionHelper.GetRange(7, 0)); Assert.AreEqual(Tuple.Create(-8, -7), PrecisionHelper.GetRange(-7, 8)); Assert.AreEqual(Tuple.Create(-8, -6), PrecisionHelper.GetRange(-7, 7)); Assert.AreEqual(Tuple.Create(-8, -4), PrecisionHelper.GetRange(-7, 6)); Assert.AreEqual(Tuple.Create(-8, 8), PrecisionHelper.GetRange(-7, 5)); Assert.AreEqual(Tuple.Create(-16, 16), PrecisionHelper.GetRange(-7, 4)); Assert.AreEqual(Tuple.Create(-32, 32), PrecisionHelper.GetRange(-7, 3)); Assert.AreEqual(Tuple.Create(-64, 64), PrecisionHelper.GetRange(-7, 2)); Assert.AreEqual(Tuple.Create(-128, 128), PrecisionHelper.GetRange(-7, 1)); Assert.AreEqual(Tuple.Create(-256, 256), PrecisionHelper.GetRange(-7, 0)); }
public void RoundTest() { Assert.AreEqual(0, PrecisionHelper.Round(0, 0)); Assert.AreEqual(0, PrecisionHelper.Round(0, 1)); Assert.AreEqual(0, PrecisionHelper.Round(0, 2)); Assert.AreEqual(0, PrecisionHelper.Round(0, 3)); Assert.AreEqual(0, PrecisionHelper.Round(0, 4)); Assert.AreEqual(0, PrecisionHelper.Round(0, 5)); Assert.AreEqual(0, PrecisionHelper.Round(0, 6)); Assert.AreEqual(0, PrecisionHelper.Round(0, 7)); Assert.AreEqual(0, PrecisionHelper.Round(0, 8)); Assert.AreEqual(0, PrecisionHelper.Round(1, 0)); Assert.AreEqual(0, PrecisionHelper.Round(1, 1)); Assert.AreEqual(0, PrecisionHelper.Round(1, 2)); Assert.AreEqual(0, PrecisionHelper.Round(1, 3)); Assert.AreEqual(0, PrecisionHelper.Round(1, 4)); Assert.AreEqual(0, PrecisionHelper.Round(1, 5)); Assert.AreEqual(0, PrecisionHelper.Round(1, 6)); Assert.AreEqual(0, PrecisionHelper.Round(1, 7)); Assert.AreEqual(1, PrecisionHelper.Round(1, 8)); Assert.AreEqual(0, PrecisionHelper.Round(-1, 0)); Assert.AreEqual(0, PrecisionHelper.Round(-1, 1)); Assert.AreEqual(0, PrecisionHelper.Round(-1, 2)); Assert.AreEqual(0, PrecisionHelper.Round(-1, 3)); Assert.AreEqual(0, PrecisionHelper.Round(-1, 4)); Assert.AreEqual(0, PrecisionHelper.Round(-1, 5)); Assert.AreEqual(0, PrecisionHelper.Round(-1, 6)); Assert.AreEqual(0, PrecisionHelper.Round(-1, 7)); Assert.AreEqual(-1, PrecisionHelper.Round(-1, 8)); Assert.AreEqual(0, PrecisionHelper.Round(37, 0)); Assert.AreEqual(0, PrecisionHelper.Round(37, 1)); Assert.AreEqual(0, PrecisionHelper.Round(37, 2)); Assert.AreEqual(32, PrecisionHelper.Round(37, 3)); Assert.AreEqual(32, PrecisionHelper.Round(37, 4)); Assert.AreEqual(32, PrecisionHelper.Round(37, 5)); Assert.AreEqual(36, PrecisionHelper.Round(37, 6)); Assert.AreEqual(36, PrecisionHelper.Round(37, 7)); Assert.AreEqual(37, PrecisionHelper.Round(37, 8)); Assert.AreEqual(0, PrecisionHelper.Round(-37, 0)); Assert.AreEqual(0, PrecisionHelper.Round(-37, 1)); Assert.AreEqual(0, PrecisionHelper.Round(-37, 2)); Assert.AreEqual(-32, PrecisionHelper.Round(-37, 3)); Assert.AreEqual(-32, PrecisionHelper.Round(-37, 4)); Assert.AreEqual(-32, PrecisionHelper.Round(-37, 5)); Assert.AreEqual(-36, PrecisionHelper.Round(-37, 6)); Assert.AreEqual(-36, PrecisionHelper.Round(-37, 7)); Assert.AreEqual(-37, PrecisionHelper.Round(-37, 8)); Assert.AreEqual(0, PrecisionHelper.Round(179.999, 0)); Assert.AreEqual(128, PrecisionHelper.Round(179.999, 1)); Assert.AreEqual(128, PrecisionHelper.Round(179.999, 2)); Assert.AreEqual(160, PrecisionHelper.Round(179.999, 3)); Assert.AreEqual(176, PrecisionHelper.Round(179.999, 4)); Assert.AreEqual(176, PrecisionHelper.Round(179.999, 5)); Assert.AreEqual(176, PrecisionHelper.Round(179.999, 6)); Assert.AreEqual(178, PrecisionHelper.Round(179.999, 7)); Assert.AreEqual(179, PrecisionHelper.Round(179.999, 8)); }
private static void DisplayDiff(IEnumerable <Benchmark[]> allBenchmarks, IEnumerable <string> allNames) { // Use the first job's benchmarks as the reference for the rows: var firstBenchmarks = allBenchmarks.FirstOrDefault(); if (firstBenchmarks == null || firstBenchmarks.Length < 1) { return; } var summaries = new Dictionary <string, List <BenchmarkSummary> >(); foreach (var benchmark in firstBenchmarks) { summaries[benchmark.FullName] = new List <BenchmarkSummary>(); } foreach (var benchmarks in allBenchmarks) { foreach (var benchmark in benchmarks) { summaries[benchmark.FullName].Add(new BenchmarkSummary() { Name = benchmark.FullName, MeanNanoseconds = benchmark.Statistics.Mean, StandardErrorNanoseconds = benchmark.Statistics.StandardError, StandardDeviationNanoseconds = benchmark.Statistics.StandardDeviation, MedianNanoseconds = benchmark.Statistics.Median, Gen0 = benchmark.Memory?.Gen0Collections ?? 0, Gen1 = benchmark.Memory?.Gen1Collections ?? 0, Gen2 = benchmark.Memory?.Gen2Collections ?? 0, AllocatedBytes = benchmark.Memory?.BytesAllocatedPerOperation ?? 0 }); } } // Simplfy the benchmarks' names where possible to remove prefixes that // are all the same to reduce the width of the first column of the table // to the shortest unique string required across all benchmarks. var nameSegments = summaries.Keys.ToDictionary(key => key, value => value.Split('.')); while (true) { var areAllFirstSegmentsTheSame = nameSegments.Values .Select(segments => segments[0]) .Distinct() .Count() == 1; if (!areAllFirstSegmentsTheSame) { // The names cannot be simplified further break; } foreach (var pair in nameSegments) { nameSegments[pair.Key] = pair.Value.Skip(1).ToArray(); } } // Map the full names to their simplified name var simplifiedNames = nameSegments.ToDictionary(key => key.Key, value => string.Join(".", value.Value)); var anyAllocations = summaries.Values .SelectMany(list => list) .Select(summary => summary.AllocatedBytes) .Any(allocatedBytes => allocatedBytes > 0); // Name + baseline mean (firstBenchmarks) + (other benchmarks' mean * 2 (value + ratio)) + // baseline allocations + (other benchmarks' mean * 2 (value + ratio)) var otherCount = allNames.Count() - 1; var table = new ResultTable(1 + 1 + (anyAllocations ? 1 : 0) + (otherCount * (anyAllocations ? 4 : 2))); var firstName = allNames.First(); table.Headers.Add("benchmark"); table.Headers.Add($"mean ({firstName})"); foreach (var name in allNames.Skip(1)) { table.Headers.Add($"mean ({name})"); table.Headers.Add("ratio"); } if (anyAllocations) { table.Headers.Add($"allocated ({firstName})"); foreach (var name in allNames.Skip(1)) { table.Headers.Add($"allocated ({name})"); table.Headers.Add("ratio"); } } foreach (var benchmark in summaries.OrderBy(kvp => kvp.Key).Select(kvp => kvp.Value)) { var firstBenchmark = benchmark.First(); var simplifiedName = simplifiedNames[firstBenchmark.Name]; var benchmarks = summaries[firstBenchmark.Name]; var row = table.AddRow(); var cell = new Cell(); cell.Elements.Add(new CellElement() { Text = simplifiedName, Alignment = CellTextAlignment.Left }); row.Add(cell); AddCells(row, summary => summary.MeanNanoseconds, UnitType.Time, benchmarks); if (anyAllocations) { AddCells(row, summary => summary.AllocatedBytes, UnitType.Size, benchmarks); } } Console.WriteLine("```md"); // Format as a GitHub-flavored Markdown table table.Render(Console.Out); Console.WriteLine("```"); void AddCells( List <Cell> row, Func <BenchmarkSummary, object> valueFactory, UnitType unitType, List <BenchmarkSummary> summaries) { var rawValues = summaries .Select(summary => valueFactory(summary)) .Select(value => Convert.ToDouble(value)) .ToArray(); var precision = PrecisionHelper.GetPrecision(rawValues); var sizeUnit = unitType == UnitType.Size ? SizeUnit.GetBestSizeUnit(rawValues) : null; var timeUnit = unitType == UnitType.Time ? TimeUnit.GetBestTimeUnit(rawValues) : null; var units = unitType switch { UnitType.Size => sizeUnit.Name, UnitType.Time => timeUnit.Name, _ => string.Empty }; var baseline = summaries[0]; for (var i = 0; i < summaries.Count; i++) { var measure = rawValues[i]; var previous = rawValues[0]; var ratio = measure == 0 ? 0 : measure / previous; var formattedValue = unitType switch { UnitType.Size => new SizeValue((long)measure).ToString(sizeUnit), UnitType.Time => new TimeInterval(measure).ToString(timeUnit, precision), _ => measure.ToString("N" + precision, CultureInfo.InvariantCulture) }; var cell = new Cell(); cell.Elements.Add(new CellElement { Text = $"{formattedValue} {units}", Alignment = CellTextAlignment.Right }); row.Add(cell); // Don't render the ratio on baseline benchmark if (summaries[i] != baseline) { row.Add(cell = new Cell()); if (measure != 0) { cell.Elements.Add(new CellElement { Text = ratio.ToString("N2", CultureInfo.InvariantCulture), Alignment = CellTextAlignment.Right }); } } } } }
public void RoundTest() { Assert.AreEqual(0.0, PrecisionHelper.Round(0.0, 0)); Assert.AreEqual(0.0, PrecisionHelper.Round(0.0, 1)); Assert.AreEqual(0.0, PrecisionHelper.Round(0.0, 2)); Assert.AreEqual(0.0, PrecisionHelper.Round(0.0, 3)); Assert.AreEqual(0.0, PrecisionHelper.Round(0.0, 4)); Assert.AreEqual(0.0, PrecisionHelper.Round(0.0, -1)); Assert.AreEqual(0.0, PrecisionHelper.Round(0.0, -2)); Assert.AreEqual(0.0, PrecisionHelper.Round(0.0, -3)); Assert.AreEqual(0.0, PrecisionHelper.Round(0.0, -4)); Assert.AreEqual(0.0, PrecisionHelper.Round(0.5, 0)); Assert.AreEqual(0.5, PrecisionHelper.Round(0.5, 1)); Assert.AreEqual(0.5, PrecisionHelper.Round(0.5, 2)); Assert.AreEqual(0.5, PrecisionHelper.Round(0.5, 3)); Assert.AreEqual(0.5, PrecisionHelper.Round(0.5, 4)); Assert.AreEqual(0.0, PrecisionHelper.Round(0.5, -1)); Assert.AreEqual(0.0, PrecisionHelper.Round(0.5, -2)); Assert.AreEqual(0.0, PrecisionHelper.Round(0.5, -3)); Assert.AreEqual(0.0, PrecisionHelper.Round(0.5, -4)); Assert.AreEqual(-1.0, PrecisionHelper.Round(-0.5, 0)); Assert.AreEqual(-0.5, PrecisionHelper.Round(-0.5, 1)); Assert.AreEqual(-0.5, PrecisionHelper.Round(-0.5, 2)); Assert.AreEqual(-0.5, PrecisionHelper.Round(-0.5, 3)); Assert.AreEqual(-0.5, PrecisionHelper.Round(-0.5, 4)); Assert.AreEqual(-2.0, PrecisionHelper.Round(-0.5, -1)); Assert.AreEqual(-4.0, PrecisionHelper.Round(-0.5, -2)); Assert.AreEqual(-8.0, PrecisionHelper.Round(-0.5, -3)); Assert.AreEqual(-16.0, PrecisionHelper.Round(-0.5, -4)); Assert.AreEqual(1.0, PrecisionHelper.Round(1.0, 0)); Assert.AreEqual(1.0, PrecisionHelper.Round(1.0, 1)); Assert.AreEqual(1.0, PrecisionHelper.Round(1.0, 2)); Assert.AreEqual(1.0, PrecisionHelper.Round(1.0, 3)); Assert.AreEqual(1.0, PrecisionHelper.Round(1.0, 4)); Assert.AreEqual(0.0, PrecisionHelper.Round(1.0, -1)); Assert.AreEqual(0.0, PrecisionHelper.Round(1.0, -2)); Assert.AreEqual(0.0, PrecisionHelper.Round(1.0, -3)); Assert.AreEqual(0.0, PrecisionHelper.Round(1.0, -4)); Assert.AreEqual(-1.0, PrecisionHelper.Round(-1.0, 0)); Assert.AreEqual(-1.0, PrecisionHelper.Round(-1.0, 1)); Assert.AreEqual(-1.0, PrecisionHelper.Round(-1.0, 2)); Assert.AreEqual(-1.0, PrecisionHelper.Round(-1.0, 3)); Assert.AreEqual(-1.0, PrecisionHelper.Round(-1.0, 4)); Assert.AreEqual(-2.0, PrecisionHelper.Round(-1.0, -1)); Assert.AreEqual(-4.0, PrecisionHelper.Round(-1.0, -2)); Assert.AreEqual(-8.0, PrecisionHelper.Round(-1.0, -3)); Assert.AreEqual(-16.0, PrecisionHelper.Round(-1.0, -4)); Assert.AreEqual(1.0, PrecisionHelper.Round(1.3, 0)); Assert.AreEqual(1.0, PrecisionHelper.Round(1.3, 1)); Assert.AreEqual(1.25, PrecisionHelper.Round(1.3, 2)); Assert.AreEqual(1.25, PrecisionHelper.Round(1.3, 3)); Assert.AreEqual(1.25, PrecisionHelper.Round(1.3, 4)); Assert.AreEqual(0.0, PrecisionHelper.Round(1.3, -1)); Assert.AreEqual(0.0, PrecisionHelper.Round(1.3, -2)); Assert.AreEqual(0.0, PrecisionHelper.Round(1.3, -3)); Assert.AreEqual(0.0, PrecisionHelper.Round(1.3, -4)); Assert.AreEqual(-2.0, PrecisionHelper.Round(-1.3, 0)); Assert.AreEqual(-1.5, PrecisionHelper.Round(-1.3, 1)); Assert.AreEqual(-1.5, PrecisionHelper.Round(-1.3, 2)); Assert.AreEqual(-1.375, PrecisionHelper.Round(-1.3, 3)); Assert.AreEqual(-1.3125, PrecisionHelper.Round(-1.3, 4)); Assert.AreEqual(-2.0, PrecisionHelper.Round(-1.3, -1)); Assert.AreEqual(-4.0, PrecisionHelper.Round(-1.3, -2)); Assert.AreEqual(-8.0, PrecisionHelper.Round(-1.3, -3)); Assert.AreEqual(-16.0, PrecisionHelper.Round(-1.3, -4)); Assert.AreEqual(37.0, PrecisionHelper.Round(37.9, 0)); Assert.AreEqual(37.5, PrecisionHelper.Round(37.9, 1)); Assert.AreEqual(37.75, PrecisionHelper.Round(37.9, 2)); Assert.AreEqual(37.875, PrecisionHelper.Round(37.9, 3)); Assert.AreEqual(37.875, PrecisionHelper.Round(37.9, 4)); Assert.AreEqual(36.0, PrecisionHelper.Round(37.9, -1)); Assert.AreEqual(36.0, PrecisionHelper.Round(37.9, -2)); Assert.AreEqual(32.0, PrecisionHelper.Round(37.9, -3)); Assert.AreEqual(32.0, PrecisionHelper.Round(37.9, -4)); Assert.AreEqual(-38.0, PrecisionHelper.Round(-37.9, 0)); Assert.AreEqual(-38.0, PrecisionHelper.Round(-37.9, 1)); Assert.AreEqual(-38.0, PrecisionHelper.Round(-37.9, 2)); Assert.AreEqual(-38.0, PrecisionHelper.Round(-37.9, 3)); Assert.AreEqual(-37.9375, PrecisionHelper.Round(-37.9, 4)); Assert.AreEqual(-38.0, PrecisionHelper.Round(-37.9, -1)); Assert.AreEqual(-40.0, PrecisionHelper.Round(-37.9, -2)); Assert.AreEqual(-40.0, PrecisionHelper.Round(-37.9, -3)); Assert.AreEqual(-48.0, PrecisionHelper.Round(-37.9, -4)); }