@@ -129,6 +129,78 @@ func TestHumanSize(t *testing.T) {
129129 assertEquals (t , "1e+04YB" , HumanSize (float64 (10000000000000 * PB )))
130130}
131131
132+ func TestHumanSizeWithPrecision (t * testing.T ) {
133+ assertEquals (t , "1kB" , HumanSizeWithPrecision (1000 , 4 ))
134+ assertEquals (t , "1.024kB" , HumanSizeWithPrecision (1024 , 4 ))
135+ assertEquals (t , "1MB" , HumanSizeWithPrecision (1000000 , 4 ))
136+ assertEquals (t , "1.049MB" , HumanSizeWithPrecision (1048576 , 4 ))
137+ assertEquals (t , "2MB" , HumanSizeWithPrecision (2 * MB , 4 ))
138+ assertEquals (t , "3.42GB" , HumanSizeWithPrecision (float64 (3.42 * GB ), 4 ))
139+ assertEquals (t , "5.372TB" , HumanSizeWithPrecision (float64 (5.372 * TB ), 4 ))
140+ assertEquals (t , "2.22PB" , HumanSizeWithPrecision (float64 (2.22 * PB ), 4 ))
141+ assertEquals (t , "1e+04YB" , HumanSizeWithPrecision (float64 (10000000000000 * PB ), 4 ))
142+
143+ assertEquals (t , "1kB" , HumanSizeWithPrecision (1000 , 3 ))
144+ assertEquals (t , "1.02kB" , HumanSizeWithPrecision (1024 , 3 ))
145+ assertEquals (t , "1MB" , HumanSizeWithPrecision (1000000 , 3 ))
146+ assertEquals (t , "1.05MB" , HumanSizeWithPrecision (1048576 , 3 ))
147+ assertEquals (t , "2MB" , HumanSizeWithPrecision (2 * MB , 3 ))
148+ assertEquals (t , "3.42GB" , HumanSizeWithPrecision (float64 (3.42 * GB ), 3 ))
149+ assertEquals (t , "5.37TB" , HumanSizeWithPrecision (float64 (5.372 * TB ), 3 ))
150+ assertEquals (t , "2.22PB" , HumanSizeWithPrecision (float64 (2.22 * PB ), 3 ))
151+ assertEquals (t , "1e+04YB" , HumanSizeWithPrecision (float64 (10000000000000 * PB ), 3 ))
152+ assertEquals (t , "1GB" , HumanSizeWithPrecision (float64 (999.5 * MB ), 3 ))
153+ assertEquals (t , "1GB" , HumanSizeWithPrecision (float64 (999.9 * MB ), 3 ))
154+ assertEquals (t , "1GB" , HumanSizeWithPrecision (float64 (1000 * MB ), 3 ))
155+
156+ assertEquals (t , "1kB" , HumanSizeWithPrecision (1000 , 2 ))
157+ assertEquals (t , "1kB" , HumanSizeWithPrecision (1024 , 2 ))
158+ assertEquals (t , "1MB" , HumanSizeWithPrecision (1000000 , 2 ))
159+ assertEquals (t , "1MB" , HumanSizeWithPrecision (1048576 , 2 ))
160+ assertEquals (t , "2MB" , HumanSizeWithPrecision (2 * MB , 2 ))
161+ assertEquals (t , "3.4GB" , HumanSizeWithPrecision (float64 (3.42 * GB ), 2 ))
162+ assertEquals (t , "5.4TB" , HumanSizeWithPrecision (float64 (5.372 * TB ), 2 ))
163+ assertEquals (t , "2.2PB" , HumanSizeWithPrecision (float64 (2.22 * PB ), 2 ))
164+ assertEquals (t , "1e+04YB" , HumanSizeWithPrecision (float64 (10000000000000 * PB ), 2 ))
165+ assertEquals (t , "0.1GB" , HumanSizeWithPrecision (float64 (99.5 * MB ), 2 ))
166+ assertEquals (t , "0.1GB" , HumanSizeWithPrecision (float64 (99.9 * MB ), 2 ))
167+ assertEquals (t , "0.1GB" , HumanSizeWithPrecision (float64 (100 * MB ), 2 ))
168+ assertEquals (t , "0.9GB" , HumanSizeWithPrecision (float64 (900 * MB ), 2 ))
169+ assertEquals (t , "0.95GB" , HumanSizeWithPrecision (float64 (950 * MB ), 2 ))
170+ assertEquals (t , "0.96GB" , HumanSizeWithPrecision (float64 (960 * MB ), 2 ))
171+ assertEquals (t , "1GB" , HumanSizeWithPrecision (float64 (996 * MB ), 2 ))
172+ assertEquals (t , "1GB" , HumanSizeWithPrecision (float64 (999.5 * MB ), 2 ))
173+ assertEquals (t , "1GB" , HumanSizeWithPrecision (float64 (999.9 * MB ), 2 ))
174+ assertEquals (t , "1GB" , HumanSizeWithPrecision (float64 (1000 * MB ), 2 ))
175+
176+ // HumanSizeWithPrecision does not work with precision 1 very well
177+ assertEquals (t , "1kB" , HumanSizeWithPrecision (1000 , 1 ))
178+ assertEquals (t , "1kB" , HumanSizeWithPrecision (1024 , 1 ))
179+ assertEquals (t , "1MB" , HumanSizeWithPrecision (1000000 , 1 ))
180+ assertEquals (t , "1MB" , HumanSizeWithPrecision (1048576 , 1 ))
181+ assertEquals (t , "2MB" , HumanSizeWithPrecision (2 * MB , 1 ))
182+ assertEquals (t , "3GB" , HumanSizeWithPrecision (float64 (3.42 * GB ), 1 ))
183+ assertEquals (t , "6TB" , HumanSizeWithPrecision (float64 (5.972 * TB ), 1 ))
184+ assertEquals (t , "2PB" , HumanSizeWithPrecision (float64 (2.22 * PB ), 1 ))
185+ assertEquals (t , "1e+04YB" , HumanSizeWithPrecision (float64 (10000000000000 * PB ), 1 ))
186+ assertEquals (t , "0.009GB" , HumanSizeWithPrecision (float64 (9.5 * MB ), 1 ))
187+ assertEquals (t , "0.01GB" , HumanSizeWithPrecision (float64 (9.9 * MB ), 1 ))
188+ assertEquals (t , "0.01GB" , HumanSizeWithPrecision (float64 (10 * MB ), 1 ))
189+ assertEquals (t , "0.09GB" , HumanSizeWithPrecision (float64 (90 * MB ), 1 ))
190+ assertEquals (t , "0.05GB" , HumanSizeWithPrecision (float64 (50 * MB ), 1 ))
191+ assertEquals (t , "0.1GB" , HumanSizeWithPrecision (float64 (96 * MB ), 1 ))
192+ assertEquals (t , "0.1GB" , HumanSizeWithPrecision (float64 (99.5 * MB ), 1 ))
193+ assertEquals (t , "0.1GB" , HumanSizeWithPrecision (float64 (99.9 * MB ), 1 ))
194+ assertEquals (t , "0.1GB" , HumanSizeWithPrecision (float64 (100 * MB ), 1 ))
195+ assertEquals (t , "0.9GB" , HumanSizeWithPrecision (float64 (900 * MB ), 1 ))
196+ assertEquals (t , "0.9GB" , HumanSizeWithPrecision (float64 (950 * MB ), 1 ))
197+ assertEquals (t , "1GB" , HumanSizeWithPrecision (float64 (960 * MB ), 1 ))
198+ assertEquals (t , "1GB" , HumanSizeWithPrecision (float64 (996 * MB ), 1 ))
199+ assertEquals (t , "1GB" , HumanSizeWithPrecision (float64 (999.5 * MB ), 1 ))
200+ assertEquals (t , "1GB" , HumanSizeWithPrecision (float64 (999.9 * MB ), 1 ))
201+ assertEquals (t , "1GB" , HumanSizeWithPrecision (float64 (1000 * MB ), 1 ))
202+ }
203+
132204func TestFromHumanSize (t * testing.T ) {
133205 assertSuccessEquals (t , 0 , FromHumanSize , "0" )
134206 assertSuccessEquals (t , 0 , FromHumanSize , "0b" )
0 commit comments