modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/fixedbugs/issue11945.go (about)

     1  // run
     2  
     3  // Copyright 2017 The Go Authors. All rights reserved.
     4  // Use of this source code is governed by a BSD-style
     5  // license that can be found in the LICENSE file.
     6  
     7  package main
     8  
     9  import "fmt"
    10  
    11  // issue 17446
    12  const (
    13  	_ = real(0) // from bug report
    14  	_ = imag(0) // from bug report
    15  
    16  	// if the arguments are untyped, the results must be untyped
    17  	// (and compatible with types that can represent the values)
    18  	_ int = real(1)
    19  	_ int = real('a')
    20  	_ int = real(2.0)
    21  	_ int = real(3i)
    22  
    23  	_ float32 = real(1)
    24  	_ float32 = real('a')
    25  	_ float32 = real(2.1)
    26  	_ float32 = real(3.2i)
    27  
    28  	_ float64 = real(1)
    29  	_ float64 = real('a')
    30  	_ float64 = real(2.1)
    31  	_ float64 = real(3.2i)
    32  
    33  	_ int = imag(1)
    34  	_ int = imag('a')
    35  	_ int = imag(2.1 + 3i)
    36  	_ int = imag(3i)
    37  
    38  	_ float32 = imag(1)
    39  	_ float32 = imag('a')
    40  	_ float32 = imag(2.1 + 3.1i)
    41  	_ float32 = imag(3i)
    42  
    43  	_ float64 = imag(1)
    44  	_ float64 = imag('a')
    45  	_ float64 = imag(2.1 + 3.1i)
    46  	_ float64 = imag(3i)
    47  )
    48  
    49  var tests = []struct {
    50  	code      string
    51  	got, want interface{}
    52  }{
    53  	{"real(1)", real(1), 1.0},
    54  	{"real('a')", real('a'), float64('a')},
    55  	{"real(2.0)", real(2.0), 2.0},
    56  	{"real(3.2i)", real(3.2i), 0.0},
    57  
    58  	{"imag(1)", imag(1), 0.0},
    59  	{"imag('a')", imag('a'), 0.0},
    60  	{"imag(2.1 + 3.1i)", imag(2.1 + 3.1i), 3.1},
    61  	{"imag(3i)", imag(3i), 3.0},
    62  }
    63  
    64  func main() {
    65  	// verify compile-time evaluated constant expressions
    66  	for _, test := range tests {
    67  		if test.got != test.want {
    68  			panic(fmt.Sprintf("%s: %v (%T) != %v (%T)", test.code, test.got, test.got, test.want, test.want))
    69  		}
    70  	}
    71  }