go-ml.dev/pkg/base@v0.0.0-20200610162856-60c38abac71b/tests/fixed8_test.go (about)

     1  package tests
     2  
     3  import (
     4  	"fmt"
     5  	"go-ml.dev/pkg/base/fu"
     6  	"gotest.tools/assert"
     7  	"testing"
     8  )
     9  
    10  type FIX8S struct {
    11  	f32 float32
    12  	f8  fu.Fixed8
    13  	s8  string
    14  	s8x string
    15  	err bool
    16  }
    17  
    18  var fix8s = []FIX8S{
    19  	{0, fu.AsFixed8(0), "0", "0", false},
    20  	{0, fu.AsFixed8(0), "0.00", "0", false},
    21  	{0, fu.AsFixed8(0), "0.001", "0", false},
    22  	{1, fu.AsFixed8(1), "1", "1", false},
    23  	{1, fu.AsFixed8(1), "1.000", "1", false},
    24  	{-1, fu.AsFixed8(-1), "-1", "-1", false},
    25  	{-0.3, fu.AsFixed8(float32(-0.3)), "-0.3", "-0.3", false},
    26  	{0.1, fu.AsFixed8(float32(0.1)), "0.1", "0.1", false},
    27  	{0.11, fu.AsFixed8(float32(0.11)), "0.11", "0.11", false},
    28  	{0.11, fu.AsFixed8(float32(0.11)), "0.111", "0.11", false},
    29  	{0.11, fu.AsFixed8(float32(0.11)), "0.111", "0.11", false},
    30  	{1.27, fu.AsFixed8(float32(1.27)), "1.271", "1.27", true},
    31  	{0, fu.AsFixed8(float32(0)), "1.28", "0", true},
    32  }
    33  
    34  func (x FIX8S) String(v fu.Fixed8) string {
    35  	return fmt.Sprintf("v: %v, f32: %v, f8: %v, s8: %v, s8x: %v", v, x.f32, x.f8, x.s8, x.s8x)
    36  }
    37  
    38  func Test_Fixed8strings(t *testing.T) {
    39  	for _, x := range fix8s {
    40  		v, err := fu.Fast8f(x.s8)
    41  		if err != nil {
    42  			assert.Assert(t, x.err)
    43  		} else {
    44  			assert.Assert(t, v == x.f8, x.String(v))
    45  			assert.Assert(t, v.Float32() == x.f32, x.String(v))
    46  			assert.Assert(t, fu.AsFixed8(x.f32) == v, x.String(v))
    47  			assert.Assert(t, v.String() == x.s8x, x.String(v))
    48  		}
    49  	}
    50  }