Skip to content

Commit 020aed8

Browse files
committed
Add unit test for short number formatter
1 parent e8acf7d commit 020aed8

3 files changed

Lines changed: 41 additions & 4 deletions

File tree

src/NuGetGallery/ViewModels/StatisticsPackagesViewModel.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public enum WeekFormats
1818
YearWeekNumber
1919
}
2020

21-
private readonly string[] _magnitudeAbbreviations = new string[] { "", "k", "M", "B", "T", "q", "Q", "s", "S", "o", "n" };
21+
private static readonly string[] _magnitudeAbbreviations = new string[] { "", "k", "M", "B", "T", "q", "Q", "s", "S", "o", "n" };
2222

2323
private DateTime? _lastUpdatedUtc;
2424

@@ -142,7 +142,9 @@ public string DisplayPercentage(float amount, float total)
142142
return (amount / total).ToString("P0", CultureInfo.CurrentCulture);
143143
}
144144

145-
public string DisplayShortNumber(double number, int sigFigures = 3)
145+
public string DisplayShortNumber(double number) => DisplayShortNumber(number, sigFigures: 3);
146+
147+
internal static string DisplayShortNumber(double number, int sigFigures = 3)
146148
{
147149
var numDiv = 0;
148150

@@ -152,7 +154,7 @@ public string DisplayShortNumber(double number, int sigFigures = 3)
152154
numDiv++;
153155
}
154156

155-
// Find a rounding factor based on size, and round to sigFigures, e.g. for 3 sig figs, 1.774545 becomes 1.77.
157+
// Find a rounding factor based on size, and round to sigFigures, e.g. for 3 sig figs, 1.776545 becomes 1.78.
156158
var placeValues = Math.Ceiling(Math.Log10(number));
157159
var roundingFactor = Math.Pow(10, sigFigures - placeValues);
158160
var roundedNum = Math.Round(number * roundingFactor) / roundingFactor;
@@ -169,7 +171,7 @@ public string DisplayShortNumber(double number, int sigFigures = 3)
169171

170172
if (numDiv >= _magnitudeAbbreviations.Length)
171173
{
172-
return formattedNum + $"10^{numDiv*3}";
174+
return formattedNum + $" 10^{numDiv*3}";
173175
}
174176

175177
return formattedNum + _magnitudeAbbreviations[numDiv];

tests/NuGetGallery.Facts/NuGetGallery.Facts.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,7 @@
302302
<Compile Include="ViewModels\ListPackageItemRequiredSignerViewModelFacts.cs" />
303303
<Compile Include="ViewModels\ListPackageItemViewModelFacts.cs" />
304304
<Compile Include="ViewModels\PackageViewModelFacts.cs" />
305+
<Compile Include="ViewModels\StatisticsPackagesViewModelFacts.cs" />
305306
<Compile Include="ViewModels\PreviousNextPagerViewModelFacts.cs" />
306307
<Compile Include="ViewModels\SignerViewModelFacts.cs" />
307308
<Compile Include="ViewModels\UserProfileModelFacts.cs" />
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using Xunit;
5+
6+
namespace NuGetGallery.ViewModels
7+
{
8+
public class StatisticsPackagesViewModelFacts
9+
{
10+
[Theory]
11+
[InlineData(1004856283, 3, "1.00B")] // pad with trailing zeroes test
12+
[InlineData(1403856283, 3, "1.40B")] // pad with trailing zeroes test
13+
[InlineData(1406856283, 3, "1.41B")]
14+
[InlineData(1774856283, 3, "1.77B")]
15+
[InlineData(1775856283, 3, "1.78B")]
16+
[InlineData(1775856283, 5, "1.7759B")]
17+
[InlineData(775856283, 3, "776M")]
18+
[InlineData(775856283, 5, "775.86M")]
19+
[InlineData(75856283, 3, "75.9M")]
20+
[InlineData(56283, 3, "56.3k")]
21+
[InlineData(56283283283283, 3, "56.3T")]
22+
[InlineData(56283283283283283, 3, "56.3q")]
23+
[InlineData(56283283283283283283283283283283d, 3, "56.3n")]
24+
[InlineData(56283283283283283283283283283283283d, 3, "56.3 10^33")]
25+
[InlineData(1, 3, "1.00")]
26+
[InlineData(10, 3, "10.0")]
27+
[InlineData(100, 3, "100")]
28+
public void CreatesShortNumberRespectingSignificantFigures(double number, int sigFigs, string expected)
29+
{
30+
var result = StatisticsPackagesViewModel.DisplayShortNumber(number, sigFigs);
31+
Assert.Equal(expected, result);
32+
}
33+
}
34+
}

0 commit comments

Comments
 (0)