github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/tests/integration/unexpected_decimal_parse_test.go (about)

     1  //go:build integration
     2  // +build integration
     3  
     4  package integration
     5  
     6  import (
     7  	"context"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/require"
    11  
    12  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/decimal"
    13  	"github.com/ydb-platform/ydb-go-sdk/v3/table"
    14  	"github.com/ydb-platform/ydb-go-sdk/v3/table/types"
    15  )
    16  
    17  func TestIssue1234UnexpectedDecimalRepresentation(t *testing.T) {
    18  	scope := newScope(t)
    19  	driver := scope.Driver()
    20  
    21  	tests := []struct {
    22  		name           string
    23  		bts            [16]byte
    24  		precision      uint32
    25  		scale          uint32
    26  		expectedFormat string
    27  	}{
    28  		{
    29  			bts:            [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 250, 240, 128},
    30  			precision:      22,
    31  			scale:          9,
    32  			expectedFormat: "0.050000000",
    33  		},
    34  	}
    35  	for _, tt := range tests {
    36  		t.Run(tt.name, func(t *testing.T) {
    37  			expected := decimal.Decimal{
    38  				Bytes:     tt.bts,
    39  				Precision: tt.precision,
    40  				Scale:     tt.scale,
    41  			}
    42  			var actual decimal.Decimal
    43  
    44  			err := driver.Table().Do(scope.Ctx, func(ctx context.Context, s table.Session) error {
    45  				_, result, err := s.Execute(ctx, table.DefaultTxControl(), `
    46  					DECLARE $value AS Decimal(22,9);
    47  					SELECT $value;`,
    48  					table.NewQueryParameters(
    49  						table.ValueParam("$value", types.DecimalValue(&expected)),
    50  					),
    51  				)
    52  				if err != nil {
    53  					return err
    54  				}
    55  				for result.NextResultSet(ctx) {
    56  					for result.NextRow() {
    57  						err = result.Scan(&actual)
    58  						if err != nil {
    59  							return err
    60  						}
    61  					}
    62  				}
    63  				return nil
    64  			})
    65  			require.NoError(t, err)
    66  			require.Equal(t, expected, actual)
    67  			require.Equal(t, tt.expectedFormat, actual.String())
    68  		})
    69  	}
    70  }