github.com/go-spring/spring-base@v1.1.3/cast/float_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  	"errors"
    21  	"strconv"
    22  	"testing"
    23  
    24  	"github.com/go-spring/spring-base/assert"
    25  	"github.com/go-spring/spring-base/cast"
    26  )
    27  
    28  func BenchmarkToFloat(b *testing.B) {
    29  	// string/strconv-8    59966035 20.0 ns/op
    30  	// string/go-spring-8  22259067 47.3 ns/op
    31  	b.Run("string", func(b *testing.B) {
    32  		v := "10"
    33  		b.Run("strconv", func(b *testing.B) {
    34  			for i := 0; i < b.N; i++ {
    35  				_, err := strconv.ParseFloat(v, 64)
    36  				if err != nil {
    37  					b.Fatal(err)
    38  				}
    39  			}
    40  		})
    41  		b.Run("go-spring", func(b *testing.B) {
    42  			for i := 0; i < b.N; i++ {
    43  				_, err := cast.ToFloat64E(v)
    44  				if err != nil {
    45  					b.Fatal(err)
    46  				}
    47  			}
    48  		})
    49  	})
    50  }
    51  
    52  func TestToFloat(t *testing.T) {
    53  
    54  	assert.Equal(t, cast.ToFloat32(nil), float32(0))
    55  
    56  	assert.Equal(t, cast.ToFloat32(int(3)), float32(3))
    57  	assert.Equal(t, cast.ToFloat32(int8(3)), float32(3))
    58  	assert.Equal(t, cast.ToFloat32(int16(3)), float32(3))
    59  	assert.Equal(t, cast.ToFloat32(int32(3)), float32(3))
    60  	assert.Equal(t, cast.ToFloat32(int64(3)), float32(3))
    61  	assert.Equal(t, cast.ToFloat32(cast.IntPtr(3)), float32(3))
    62  	assert.Equal(t, cast.ToFloat32(cast.Int8Ptr(3)), float32(3))
    63  	assert.Equal(t, cast.ToFloat32(cast.Int16Ptr(3)), float32(3))
    64  	assert.Equal(t, cast.ToFloat32(cast.Int32Ptr(3)), float32(3))
    65  	assert.Equal(t, cast.ToFloat32(cast.Int64Ptr(3)), float32(3))
    66  
    67  	assert.Equal(t, cast.ToFloat32(uint(3)), float32(3))
    68  	assert.Equal(t, cast.ToFloat32(uint8(3)), float32(3))
    69  	assert.Equal(t, cast.ToFloat32(uint16(3)), float32(3))
    70  	assert.Equal(t, cast.ToFloat32(uint32(3)), float32(3))
    71  	assert.Equal(t, cast.ToFloat32(uint64(3)), float32(3))
    72  	assert.Equal(t, cast.ToFloat32(cast.UintPtr(3)), float32(3))
    73  	assert.Equal(t, cast.ToFloat32(cast.Uint8Ptr(3)), float32(3))
    74  	assert.Equal(t, cast.ToFloat32(cast.Uint16Ptr(3)), float32(3))
    75  	assert.Equal(t, cast.ToFloat32(cast.Uint32Ptr(3)), float32(3))
    76  	assert.Equal(t, cast.ToFloat32(cast.Uint64Ptr(3)), float32(3))
    77  
    78  	assert.Equal(t, cast.ToFloat64(float32(3)), float64(3))
    79  	assert.Equal(t, cast.ToFloat64(float64(3)), float64(3))
    80  	assert.Equal(t, cast.ToFloat64(cast.Float32Ptr(3)), float64(3))
    81  	assert.Equal(t, cast.ToFloat64(cast.Float64Ptr(3)), float64(3))
    82  
    83  	assert.Equal(t, cast.ToFloat64("3"), float64(3))
    84  	assert.Equal(t, cast.ToFloat64(cast.StringPtr("3")), float64(3))
    85  
    86  	assert.Equal(t, cast.ToFloat64(true), float64(1))
    87  	assert.Equal(t, cast.ToFloat64(false), float64(0))
    88  	assert.Equal(t, cast.ToFloat64(cast.BoolPtr(true)), float64(1))
    89  	assert.Equal(t, cast.ToFloat64(cast.BoolPtr(false)), float64(0))
    90  
    91  	_, err := cast.ToFloat64E("abc")
    92  	assert.Error(t, err, "strconv.ParseFloat: parsing \"abc\": invalid syntax")
    93  
    94  	_, err = cast.ToFloat64E(errors.New("abc"))
    95  	assert.Error(t, err, "unable to cast type \\(\\*errors\\.errorString\\) to float64")
    96  }