// 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 composition, decomposition, and reflection on complex numbers. | |
package main | |
import "unsafe" | |
import "reflect" | |
const ( | |
R = 5 | |
I = 6i | |
C1 = R + I // ADD(5,6) | |
) | |
func main() { | |
c0 := C1 | |
c0 = (c0 + c0 + c0) / (c0 + c0 + 3i) | |
r, i := real(c0), imag(c0) | |
d := r - 1.292308 | |
if d < 0 { | |
d = - d | |
} | |
if d > 1e-6 { | |
println(r, "!= 1.292308") | |
panic(0) | |
} | |
d = i + 0.1384615 | |
if d < 0 { | |
d = - d | |
} | |
if d > 1e-6 { | |
println(i, "!= -0.1384615") | |
panic(0) | |
} | |
c := *(*complex128)(unsafe.Pointer(&c0)) | |
if c != c0 { | |
println(c, "!=", c) | |
panic(0) | |
} | |
var a interface{} | |
switch c := reflect.ValueOf(a); c.Kind() { | |
case reflect.Complex64, reflect.Complex128: | |
v := c.Complex() | |
_, _ = complex128(v), true | |
} | |
} |