|  | // run | 
|  |  | 
|  | // Copyright 2010 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | // Test complex numbers,including fmt support. | 
|  | // Used to crash. | 
|  |  | 
|  | package main | 
|  |  | 
|  | import "fmt" | 
|  |  | 
|  | const ( | 
|  | R = 5 | 
|  | I = 6i | 
|  |  | 
|  | C1 = R + I // ADD(5,6) | 
|  | ) | 
|  |  | 
|  | func want(s, w string) { | 
|  | if s != w { | 
|  | panic(s + " != " + w) | 
|  | } | 
|  | } | 
|  |  | 
|  | func doprint(c complex128, w string) { | 
|  | s := fmt.Sprintf("%f", c) | 
|  | want(s, w) | 
|  | } | 
|  |  | 
|  | func main() { | 
|  |  | 
|  | // constants | 
|  | s := fmt.Sprintf("%f", -C1) | 
|  | want(s, "(-5.000000-6.000000i)") | 
|  | doprint(C1, "(5.000000+6.000000i)") | 
|  |  | 
|  | // variables | 
|  | c1 := C1 | 
|  | s = fmt.Sprintf("%f", c1) | 
|  | want(s, "(5.000000+6.000000i)") | 
|  | doprint(c1, "(5.000000+6.000000i)") | 
|  |  | 
|  | // 128 | 
|  | c2 := complex128(C1) | 
|  | s = fmt.Sprintf("%G", c2) | 
|  | want(s, "(5+6i)") | 
|  |  | 
|  | // real, imag, complex | 
|  | c3 := complex(real(c2)+3, imag(c2)-5) + c2 | 
|  | s = fmt.Sprintf("%G", c3) | 
|  | want(s, "(13+7i)") | 
|  |  | 
|  | // compiler used to crash on nested divide | 
|  | c4 := complex(real(c3/2), imag(c3/2)) | 
|  | if c4 != c3/2 { | 
|  | fmt.Printf("BUG: c3 = %G != c4 = %G\n", c3, c4) | 
|  | panic(0) | 
|  | } | 
|  | } |