github.com/llir/llvm@v0.3.6/ir/constant/const_float_test.go (about)

     1  package constant_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/llir/llvm/ir/constant"
     7  	"github.com/llir/llvm/ir/types"
     8  )
     9  
    10  func TestNewFloatFromStringForPPCFP128(t *testing.T) {
    11  	golden := []string{
    12  		"0xM00000000000000000000000000000000",
    13  		"0xM3DF00000000000000000000000000000",
    14  		"0xM3FF00000000000000000000000000000",
    15  		"0xM40000000000000000000000000000000",
    16  		//"0xM400C0000000000300000000010000000", // see issue https://github.com/llir/llvm/issues/124
    17  		"0xM400F000000000000BCB0000000000000",
    18  		"0xM403B0000000000000000000000000000",
    19  		"0xM405EDA5E353F7CEE0000000000000000",
    20  		"0xM4093B400000000000000000000000000",
    21  		"0xM41F00000000000000000000000000000",
    22  		"0xM4D436562A0416DE00000000000000000",
    23  		"0xM80000000000000000000000000000000",
    24  		"0xM818F2887B9295809800000000032D000",
    25  		"0xMC00547AE147AE1483CA47AE147AE147A",
    26  	}
    27  	for _, g := range golden {
    28  		f, err := constant.NewFloatFromString(types.PPC_FP128, g)
    29  		if err != nil {
    30  			t.Errorf("%q: unable to create new float from string: %v", g, err)
    31  			continue
    32  		}
    33  		got := f.Ident()
    34  		want := g
    35  		if want != got {
    36  			t.Errorf("%q: floating-point value string mismatch; expected %q, got %q", g, want, got)
    37  		}
    38  	}
    39  }
    40  
    41  func TestNewFloatFromStringForFP128(t *testing.T) {
    42  	golden := []struct {
    43  		in   string
    44  		want string
    45  	}{
    46  		{in: "0xL0", want: "0xL00000000000000000000000000000000"},
    47  		{in: "0xL00000000000000000000000000000000", want: "0xL00000000000000000000000000000000"},
    48  		{in: "0xL00000000000000000001000000000000", want: "0xL00000000000000000001000000000000"},
    49  		{in: "0xL00000000000000003FFF000000000000", want: "0xL00000000000000003FFF000000000000"},
    50  		{in: "0xL00000000000000003FFF000001000000", want: "0xL00000000000000003FFF000001000000"},
    51  		{in: "0xL00000000000000003FFF000002000000", want: "0xL00000000000000003FFF000002000000"},
    52  		{in: "0xL00000000000000004000000000000000", want: "0xL00000000000000004000000000000000"},
    53  		{in: "0xL00000000000000004001400000000000", want: "0xL00000000000000004001400000000000"},
    54  		{in: "0xL00000000000000004004C00000000000", want: "0xL00000000000000004004C00000000000"},
    55  		{in: "0xL00000000000000004201000000000000", want: "0xL00000000000000004201000000000000"},
    56  		{in: "0xL00000000000000005001000000000000", want: "0xL00000000000000005001000000000000"},
    57  		{in: "0xL00000000000000007FFF000000000000", want: "0xL00000000000000007FFF000000000000"},
    58  		{in: "0xL00000000000000007FFF800000000000", want: "0xL00000000000000007FFF800000000000"},
    59  		{in: "0xL00000000000000008000000000000000", want: "0xL00000000000000008000000000000000"},
    60  		{in: "0xL00000000000000013FFF000000000000", want: "0xL00000000000000013FFF000000000000"},
    61  		{in: "0xL00000000000000018000000000000000", want: "0xL00000000000000018000000000000000"},
    62  		{in: "0xL000FFFFF00000000000FFFFF00000000", want: "0xL000FFFFF00000000000FFFFF00000000"},
    63  		{in: "0xL00FF00FF00FF00FF00FF00FF00FF00FF", want: "0xL00FF00FF00FF00FF00FF00FF00FF00FF"},
    64  		{in: "0xL01", want: "0xL00000000000000000000000000000001"},
    65  		{in: "0xL08000000000000003FFF000000000000", want: "0xL08000000000000003FFF000000000000"},
    66  		{in: "0xL300000000000000040089CA8F5C28F5C", want: "0xL300000000000000040089CA8F5C28F5C"},
    67  		{in: "0xL5000000000000000400E0C26324C8366", want: "0xL5000000000000000400E0C26324C8366"},
    68  		{in: "0xL8000000000000000400A24E2E147AE14", want: "0xL8000000000000000400A24E2E147AE14"},
    69  		{in: "0xL999999999999999A3FFB999999999999", want: "0xL999999999999999A3FFB999999999999"},
    70  		{in: "0xLEB851EB851EB851F400091EB851EB851", want: "0xLEB851EB851EB851F400091EB851EB851"},
    71  		{in: "0xLF000000000000000400808AB851EB851", want: "0xLF000000000000000400808AB851EB851"},
    72  		{in: "0xLF8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8", want: "0xLF8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8"},
    73  	}
    74  	for _, g := range golden {
    75  		f, err := constant.NewFloatFromString(types.FP128, g.in)
    76  		if err != nil {
    77  			t.Errorf("%q: unable to create new float from string: %v", g.in, err)
    78  			continue
    79  		}
    80  		got := f.Ident()
    81  		if g.want != got {
    82  			t.Errorf("%q: floating-point value string mismatch; expected %q, got %q", g.in, g.want, got)
    83  		}
    84  	}
    85  }