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