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  }