github.com/go-spring/spring-base@v1.1.3/cast/duration_test.go (about) 1 /* 2 * Copyright 2012-2019 the original author or authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * https://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package cast_test 18 19 import ( 20 "testing" 21 "time" 22 23 "github.com/go-spring/spring-base/assert" 24 "github.com/go-spring/spring-base/cast" 25 ) 26 27 func BenchmarkToDuration(b *testing.B) { 28 // string/parse-8 28863253 38.5 ns/op 29 // string/go-spring-8 18037459 66.7 ns/op 30 b.Run("string", func(b *testing.B) { 31 v := cast.ToString(time.Now().UnixNano()) + "ns" 32 b.Run("parse", func(b *testing.B) { 33 for i := 0; i < b.N; i++ { 34 _, err := time.ParseDuration(v) 35 if err != nil { 36 b.Fatal(err) 37 } 38 } 39 }) 40 41 b.Run("go-spring", func(b *testing.B) { 42 for i := 0; i < b.N; i++ { 43 _, err := cast.ToDurationE(v) 44 if err != nil { 45 b.Fatal(err) 46 } 47 } 48 }) 49 }) 50 } 51 52 func TestToDuration(t *testing.T) { 53 54 assert.Equal(t, cast.ToDuration(nil), time.Duration(0)) 55 56 assert.Equal(t, cast.ToDuration(int(3)), time.Duration(3)) 57 assert.Equal(t, cast.ToDuration(int8(3)), time.Duration(3)) 58 assert.Equal(t, cast.ToDuration(int16(3)), time.Duration(3)) 59 assert.Equal(t, cast.ToDuration(int32(3)), time.Duration(3)) 60 assert.Equal(t, cast.ToDuration(int64(3)), time.Duration(3)) 61 assert.Equal(t, cast.ToDuration(cast.IntPtr(3)), time.Duration(3)) 62 assert.Equal(t, cast.ToDuration(cast.Int8Ptr(3)), time.Duration(3)) 63 assert.Equal(t, cast.ToDuration(cast.Int16Ptr(3)), time.Duration(3)) 64 assert.Equal(t, cast.ToDuration(cast.Int32Ptr(3)), time.Duration(3)) 65 assert.Equal(t, cast.ToDuration(cast.Int64Ptr(3)), time.Duration(3)) 66 67 assert.Equal(t, cast.ToDuration(uint(3), time.Millisecond), 3*time.Millisecond) 68 assert.Equal(t, cast.ToDuration(uint8(3), time.Millisecond), 3*time.Millisecond) 69 assert.Equal(t, cast.ToDuration(uint16(3), time.Millisecond), 3*time.Millisecond) 70 assert.Equal(t, cast.ToDuration(uint32(3), time.Millisecond), 3*time.Millisecond) 71 assert.Equal(t, cast.ToDuration(uint64(3), time.Millisecond), 3*time.Millisecond) 72 assert.Equal(t, cast.ToDuration(cast.UintPtr(3), time.Second), 3*time.Second) 73 assert.Equal(t, cast.ToDuration(cast.Uint8Ptr(3), time.Second), 3*time.Second) 74 assert.Equal(t, cast.ToDuration(cast.Uint16Ptr(3), time.Second), 3*time.Second) 75 assert.Equal(t, cast.ToDuration(cast.Uint32Ptr(3), time.Second), 3*time.Second) 76 assert.Equal(t, cast.ToDuration(cast.Uint64Ptr(3), time.Second), 3*time.Second) 77 78 assert.Equal(t, cast.ToDuration(float32(3)), time.Duration(3)) 79 assert.Equal(t, cast.ToDuration(float64(3)), time.Duration(3)) 80 assert.Equal(t, cast.ToDuration(cast.Float32Ptr(3)), time.Duration(3)) 81 assert.Equal(t, cast.ToDuration(cast.Float64Ptr(3)), time.Duration(3)) 82 83 assert.Equal(t, cast.ToDuration("3ns"), time.Duration(3)) 84 assert.Equal(t, cast.ToDuration(cast.StringPtr("3ns")), time.Duration(3)) 85 86 assert.Equal(t, cast.ToDuration(time.Second), time.Second) 87 assert.Equal(t, cast.ToDuration(time.Minute), time.Minute) 88 89 _, err := cast.ToDurationE(true) 90 assert.Error(t, err, "unable to cast type \\(bool\\) to time.Duration") 91 92 _, err = cast.ToDurationE(false) 93 assert.Error(t, err, "unable to cast type \\(bool\\) to time.Duration") 94 95 _, err = cast.ToDurationE(cast.BoolPtr(true)) 96 assert.Error(t, err, "unable to cast type \\(\\*bool\\) to time.Duration") 97 98 _, err = cast.ToDurationE(cast.BoolPtr(false)) 99 assert.Error(t, err, "unable to cast type \\(\\*bool\\) to time.Duration") 100 101 _, err = cast.ToDurationE("3") 102 assert.Error(t, err, "time: missing unit in duration \"3\"") 103 104 _, err = cast.ToDurationE("abc") 105 assert.Error(t, err, "time: invalid duration \"abc\"") 106 }