github.com/ncw/rclone@v1.48.1-0.20190724201158-a35aa1360e3e/fs/sizesuffix_test.go (about) 1 package fs 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/spf13/pflag" 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 ) 11 12 // Check it satisfies the interface 13 var _ pflag.Value = (*SizeSuffix)(nil) 14 15 func TestSizeSuffixString(t *testing.T) { 16 for _, test := range []struct { 17 in float64 18 want string 19 }{ 20 {0, "0"}, 21 {102, "102"}, 22 {1024, "1k"}, 23 {1024 * 1024, "1M"}, 24 {1024 * 1024 * 1024, "1G"}, 25 {10 * 1024 * 1024 * 1024, "10G"}, 26 {10.1 * 1024 * 1024 * 1024, "10.100G"}, 27 {-1, "off"}, 28 {-100, "off"}, 29 } { 30 ss := SizeSuffix(test.in) 31 got := ss.String() 32 assert.Equal(t, test.want, got) 33 } 34 } 35 36 func TestSizeSuffixUnit(t *testing.T) { 37 for _, test := range []struct { 38 in float64 39 want string 40 }{ 41 {0, "0 Bytes"}, 42 {102, "102 Bytes"}, 43 {1024, "1 kBytes"}, 44 {1024 * 1024, "1 MBytes"}, 45 {1024 * 1024 * 1024, "1 GBytes"}, 46 {10 * 1024 * 1024 * 1024, "10 GBytes"}, 47 {10.1 * 1024 * 1024 * 1024, "10.100 GBytes"}, 48 {10 * 1024 * 1024 * 1024 * 1024, "10 TBytes"}, 49 {10 * 1024 * 1024 * 1024 * 1024 * 1024, "10 PBytes"}, 50 {1 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024, "1024 PBytes"}, 51 {-1, "off"}, 52 {-100, "off"}, 53 } { 54 ss := SizeSuffix(test.in) 55 got := ss.Unit("Bytes") 56 assert.Equal(t, test.want, got) 57 } 58 } 59 60 func TestSizeSuffixSet(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 {"102B", 102, false}, 69 {"0.1k", 102, false}, 70 {"0.1", 102, false}, 71 {"1K", 1024, false}, 72 {"1", 1024, false}, 73 {"2.5", 1024 * 2.5, false}, 74 {"1M", 1024 * 1024, false}, 75 {"1.g", 1024 * 1024 * 1024, false}, 76 {"10G", 10 * 1024 * 1024 * 1024, false}, 77 {"10T", 10 * 1024 * 1024 * 1024 * 1024, false}, 78 {"10P", 10 * 1024 * 1024 * 1024 * 1024 * 1024, false}, 79 {"off", -1, false}, 80 {"OFF", -1, false}, 81 {"", 0, true}, 82 {"1q", 0, true}, 83 {"1.q", 0, true}, 84 {"1q", 0, true}, 85 {"-1K", 0, true}, 86 } { 87 ss := SizeSuffix(0) 88 err := ss.Set(test.in) 89 if test.err { 90 require.Error(t, err, test.in) 91 } else { 92 require.NoError(t, err, test.in) 93 } 94 assert.Equal(t, test.want, int64(ss)) 95 } 96 } 97 98 func TestSizeSuffixScan(t *testing.T) { 99 var v SizeSuffix 100 n, err := fmt.Sscan(" 17M ", &v) 101 require.NoError(t, err) 102 assert.Equal(t, 1, n) 103 assert.Equal(t, SizeSuffix(17<<20), v) 104 }