bytes_test.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. package bytes
  2. import (
  3. "math"
  4. "testing"
  5. "github.com/stretchr/testify/assert"
  6. )
  7. func TestBytesFormat(t *testing.T) {
  8. // B
  9. b := Format(0)
  10. assert.Equal(t, "0", b)
  11. // B
  12. b = Format(515)
  13. assert.Equal(t, "515B", b)
  14. // KB
  15. b = Format(31323)
  16. assert.Equal(t, "30.59KB", b)
  17. // MB
  18. b = Format(13231323)
  19. assert.Equal(t, "12.62MB", b)
  20. // GB
  21. b = Format(7323232398)
  22. assert.Equal(t, "6.82GB", b)
  23. // TB
  24. b = Format(7323232398434)
  25. assert.Equal(t, "6.66TB", b)
  26. // PB
  27. b = Format(9923232398434432)
  28. assert.Equal(t, "8.81PB", b)
  29. // EB
  30. b = Format(math.MaxInt64)
  31. assert.Equal(t, "8.00EB", b)
  32. }
  33. func TestBytesParseErrors(t *testing.T) {
  34. _, err := Parse("B999")
  35. if assert.Error(t, err) {
  36. assert.EqualError(t, err, "error parsing value=B999")
  37. }
  38. }
  39. func TestFloats(t *testing.T) {
  40. // From string:
  41. str := "12.25KB"
  42. value, err := Parse(str)
  43. assert.NoError(t, err)
  44. assert.Equal(t, int64(12544), value)
  45. str2 := Format(value)
  46. assert.Equal(t, str, str2)
  47. // To string:
  48. val := int64(13233029)
  49. str = Format(val)
  50. assert.Equal(t, "12.62MB", str)
  51. val2, err := Parse(str)
  52. assert.NoError(t, err)
  53. assert.Equal(t, val, val2)
  54. }
  55. func TestBytesParse(t *testing.T) {
  56. // B
  57. b, err := Parse("999")
  58. if assert.NoError(t, err) {
  59. assert.Equal(t, int64(999), b)
  60. }
  61. b, err = Parse("-100")
  62. if assert.NoError(t, err) {
  63. assert.Equal(t, int64(-100), b)
  64. }
  65. b, err = Parse("100.1")
  66. if assert.NoError(t, err) {
  67. assert.Equal(t, int64(100), b)
  68. }
  69. b, err = Parse("515B")
  70. if assert.NoError(t, err) {
  71. assert.Equal(t, int64(515), b)
  72. }
  73. // B with space
  74. b, err = Parse("515 B")
  75. if assert.NoError(t, err) {
  76. assert.Equal(t, int64(515), b)
  77. }
  78. // KB
  79. b, err = Parse("12.25KB")
  80. if assert.NoError(t, err) {
  81. assert.Equal(t, int64(12544), b)
  82. }
  83. b, err = Parse("12KB")
  84. if assert.NoError(t, err) {
  85. assert.Equal(t, int64(12288), b)
  86. }
  87. b, err = Parse("12K")
  88. if assert.NoError(t, err) {
  89. assert.Equal(t, int64(12288), b)
  90. }
  91. // kb, lowercase multiple test
  92. b, err = Parse("12.25kb")
  93. if assert.NoError(t, err) {
  94. assert.Equal(t, int64(12544), b)
  95. }
  96. b, err = Parse("12kb")
  97. if assert.NoError(t, err) {
  98. assert.Equal(t, int64(12288), b)
  99. }
  100. b, err = Parse("12k")
  101. if assert.NoError(t, err) {
  102. assert.Equal(t, int64(12288), b)
  103. }
  104. // KB with space
  105. b, err = Parse("12.25 KB")
  106. if assert.NoError(t, err) {
  107. assert.Equal(t, int64(12544), b)
  108. }
  109. b, err = Parse("12 KB")
  110. if assert.NoError(t, err) {
  111. assert.Equal(t, int64(12288), b)
  112. }
  113. b, err = Parse("12 K")
  114. if assert.NoError(t, err) {
  115. assert.Equal(t, int64(12288), b)
  116. }
  117. // MB
  118. b, err = Parse("2MB")
  119. if assert.NoError(t, err) {
  120. assert.Equal(t, int64(2097152), b)
  121. }
  122. b, err = Parse("2M")
  123. if assert.NoError(t, err) {
  124. assert.Equal(t, int64(2097152), b)
  125. }
  126. // GB with space
  127. b, err = Parse("6 GB")
  128. if assert.NoError(t, err) {
  129. assert.Equal(t, int64(6442450944), b)
  130. }
  131. b, err = Parse("6 G")
  132. if assert.NoError(t, err) {
  133. assert.Equal(t, int64(6442450944), b)
  134. }
  135. // GB
  136. b, err = Parse("6GB")
  137. if assert.NoError(t, err) {
  138. assert.Equal(t, int64(6442450944), b)
  139. }
  140. b, err = Parse("6G")
  141. if assert.NoError(t, err) {
  142. assert.Equal(t, int64(6442450944), b)
  143. }
  144. // TB
  145. b, err = Parse("5TB")
  146. if assert.NoError(t, err) {
  147. assert.Equal(t, int64(5497558138880), b)
  148. }
  149. b, err = Parse("5T")
  150. if assert.NoError(t, err) {
  151. assert.Equal(t, int64(5497558138880), b)
  152. }
  153. // TB with space
  154. b, err = Parse("5 TB")
  155. if assert.NoError(t, err) {
  156. assert.Equal(t, int64(5497558138880), b)
  157. }
  158. b, err = Parse("5 T")
  159. if assert.NoError(t, err) {
  160. assert.Equal(t, int64(5497558138880), b)
  161. }
  162. // PB
  163. b, err = Parse("9PB")
  164. if assert.NoError(t, err) {
  165. assert.Equal(t, int64(10133099161583616), b)
  166. }
  167. b, err = Parse("9P")
  168. if assert.NoError(t, err) {
  169. assert.Equal(t, int64(10133099161583616), b)
  170. }
  171. // PB with space
  172. b, err = Parse("9 PB")
  173. if assert.NoError(t, err) {
  174. assert.Equal(t, int64(10133099161583616), b)
  175. }
  176. b, err = Parse("9 P")
  177. if assert.NoError(t, err) {
  178. assert.Equal(t, int64(10133099161583616), b)
  179. }
  180. // EB
  181. b, err = Parse("8EB")
  182. if assert.NoError(t, err) {
  183. assert.True(t, math.MaxInt64 == b-1)
  184. }
  185. b, err = Parse("8E")
  186. if assert.NoError(t, err) {
  187. assert.True(t, math.MaxInt64 == b-1)
  188. }
  189. // EB with spaces
  190. b, err = Parse("8 EB")
  191. if assert.NoError(t, err) {
  192. assert.True(t, math.MaxInt64 == b-1)
  193. }
  194. b, err = Parse("8 E")
  195. if assert.NoError(t, err) {
  196. assert.True(t, math.MaxInt64 == b-1)
  197. }
  198. }