github.com/divyam234/rclone@v1.64.1/fs/countsuffix_test.go (about) 1 package fs 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 ) 11 12 // Check it satisfies the interface 13 var _ flagger = (*CountSuffix)(nil) 14 15 func TestCountSuffixString(t *testing.T) { 16 for _, test := range []struct { 17 in float64 18 want string 19 }{ 20 {0, "0"}, 21 {102, "102"}, 22 {1000, "1k"}, 23 {1000 * 1000, "1M"}, 24 {1000 * 1000 * 1000, "1G"}, 25 {10 * 1000 * 1000 * 1000, "10G"}, 26 {10.1 * 1000 * 1000 * 1000, "10.100G"}, 27 {-1, "off"}, 28 {-100, "off"}, 29 } { 30 ss := CountSuffix(test.in) 31 got := ss.String() 32 assert.Equal(t, test.want, got) 33 } 34 } 35 36 func TestCountSuffixUnit(t *testing.T) { 37 for _, test := range []struct { 38 in float64 39 want string 40 }{ 41 {0, "0 Byte"}, 42 {102, "102 Byte"}, 43 {1000, "1 kByte"}, 44 {1000 * 1000, "1 MByte"}, 45 {1000 * 1000 * 1000, "1 GByte"}, 46 {10 * 1000 * 1000 * 1000, "10 GByte"}, 47 {10.1 * 1000 * 1000 * 1000, "10.100 GByte"}, 48 {10 * 1000 * 1000 * 1000 * 1000, "10 TByte"}, 49 {10 * 1000 * 1000 * 1000 * 1000 * 1000, "10 PByte"}, 50 {1 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000, "1 EByte"}, 51 {-1, "off"}, 52 {-100, "off"}, 53 } { 54 ss := CountSuffix(test.in) 55 got := ss.Unit("Byte") 56 assert.Equal(t, test.want, got) 57 } 58 } 59 60 func TestCountSuffixSet(t *testing.T) { 61 for _, test := range []struct { 62 in string 63 want int64 64 err bool 65 }{ 66 {"0", 0, false}, 67 {"1b", 1, false}, 68 {"100B", 100, false}, 69 {"0.1k", 100, false}, 70 {"0.1", 100, false}, 71 {"1K", 1000, false}, 72 {"1k", 1000, false}, 73 {"1KB", 1000, false}, 74 {"1kB", 1000, false}, 75 {"1kb", 1000, false}, 76 {"1", 1000, false}, 77 {"2.5", 1000 * 2.5, false}, 78 {"1M", 1000 * 1000, false}, 79 {"1MB", 1000 * 1000, false}, 80 {"1.g", 1000 * 1000 * 1000, false}, 81 {"10G", 10 * 1000 * 1000 * 1000, false}, 82 {"10T", 10 * 1000 * 1000 * 1000 * 1000, false}, 83 {"10P", 10 * 1000 * 1000 * 1000 * 1000 * 1000, false}, 84 {"off", -1, false}, 85 {"OFF", -1, false}, 86 {"", 0, true}, 87 {"1q", 0, true}, 88 {"1.q", 0, true}, 89 {"1q", 0, true}, 90 {"-1K", 0, true}, 91 {"1i", 0, true}, 92 {"1iB", 0, true}, 93 {"1Ki", 0, true}, 94 {"1KiB", 0, true}, 95 } { 96 ss := CountSuffix(0) 97 err := ss.Set(test.in) 98 if test.err { 99 require.Error(t, err, test.in) 100 } else { 101 require.NoError(t, err, test.in) 102 } 103 assert.Equal(t, test.want, int64(ss)) 104 } 105 } 106 107 func TestCountSuffixScan(t *testing.T) { 108 var v CountSuffix 109 n, err := fmt.Sscan(" 17M ", &v) 110 require.NoError(t, err) 111 assert.Equal(t, 1, n) 112 assert.Equal(t, CountSuffix(17000000), v) 113 } 114 115 func TestCountSuffixUnmarshalJSON(t *testing.T) { 116 for _, test := range []struct { 117 in string 118 want int64 119 err bool 120 }{ 121 {`"0"`, 0, false}, 122 {`"102B"`, 102, false}, 123 {`"1K"`, 1000, false}, 124 {`"2.5"`, 1000 * 2.5, false}, 125 {`"1M"`, 1000 * 1000, false}, 126 {`"1.g"`, 1000 * 1000 * 1000, false}, 127 {`"10G"`, 10 * 1000 * 1000 * 1000, false}, 128 {`"off"`, -1, false}, 129 {`""`, 0, true}, 130 {`"1q"`, 0, true}, 131 {`"-1K"`, 0, true}, 132 {`0`, 0, false}, 133 {`102`, 102, false}, 134 {`1000`, 1000, false}, 135 {`1000000000`, 1000000000, false}, 136 {`1.1.1`, 0, true}, 137 } { 138 var ss CountSuffix 139 err := json.Unmarshal([]byte(test.in), &ss) 140 if test.err { 141 require.Error(t, err, test.in) 142 } else { 143 require.NoError(t, err, test.in) 144 } 145 assert.Equal(t, test.want, int64(ss)) 146 } 147 }