| // 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) | 
 | 	} | 
 | } |