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 }