]> Cypherpunks.ru repositories - gostls13.git/blob - test/ken/cplx4.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / test / ken / cplx4.go
1 // run
2
3 // Copyright 2010 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 // Test complex numbers,including fmt support.
8 // Used to crash.
9
10 package main
11
12 import "fmt"
13
14 const (
15         R = 5
16         I = 6i
17
18         C1 = R + I // ADD(5,6)
19 )
20
21 func want(s, w string) {
22         if s != w {
23                 panic(s + " != " + w)
24         }
25 }
26
27 func doprint(c complex128, w string) {
28         s := fmt.Sprintf("%f", c)
29         want(s, w)
30 }
31
32 func main() {
33
34         // constants
35         s := fmt.Sprintf("%f", -C1)
36         want(s, "(-5.000000-6.000000i)")
37         doprint(C1, "(5.000000+6.000000i)")
38
39         // variables
40         c1 := C1
41         s = fmt.Sprintf("%f", c1)
42         want(s, "(5.000000+6.000000i)")
43         doprint(c1, "(5.000000+6.000000i)")
44
45         // 128
46         c2 := complex128(C1)
47         s = fmt.Sprintf("%G", c2)
48         want(s, "(5+6i)")
49
50         // real, imag, complex
51         c3 := complex(real(c2)+3, imag(c2)-5) + c2
52         s = fmt.Sprintf("%G", c3)
53         want(s, "(13+7i)")
54
55         // compiler used to crash on nested divide
56         c4 := complex(real(c3/2), imag(c3/2))
57         if c4 != c3/2 {
58                 fmt.Printf("BUG: c3 = %G != c4 = %G\n", c3, c4)
59                 panic(0)
60         }
61 }