blob: eb1da7b8c0da13529f59c76329331d5536a721c7 [file] [log] [blame]
Russ Coxd2cc9882012-02-16 23:50:37 -05001// run
Ken Thompson7d4b1e42010-03-02 18:32:11 -08002
Ken Thompsonf229c8b2010-03-09 12:49:24 -08003// Copyright 2010 The Go Authors. All rights reserved.
Ken Thompson7d4b1e42010-03-02 18:32:11 -08004// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
Rob Pikeeb37b5b2012-02-24 16:24:24 +11007// Test arithmetic on complex numbers, including multiplication and division.
8
Ken Thompson7d4b1e42010-03-02 18:32:11 -08009package main
10
11const (
12 R = 5
13 I = 6i
14
15 C1 = R + I // ADD(5,6)
16 C2 = R - I // SUB(5,-6)
17 C3 = -(R + I) // ADD(5,6) NEG(-5,-6)
18 C4 = -(R - I) // SUB(5,-6) NEG(-5,6)
19
20 C5 = C1 + R // ADD(10,6)
21 C6 = C1 + I // ADD(5,12)
22
23 Ca = C5 + C6 // ADD(15,18)
24 Cb = C5 - C6 // SUB(5,-6)
25
26 Cc = C5 * C6 // MUL(-22,-150)
27 Cd = C5 / C6 // DIV(0.721893,-0.532544)
28 Ce = Cd * C6 // MUL(10,6) sb C5
29)
30
31func main() {
32
Russ Coxf2b5a072011-01-19 23:09:00 -050033 var r complex64 = 5 + 0i
Ken Thompson7d4b1e42010-03-02 18:32:11 -080034 if r != R {
Rob Pike325cf8e2010-03-24 16:46:53 -070035 println("opcode 1", r, R)
36 panic("fail")
Ken Thompson7d4b1e42010-03-02 18:32:11 -080037 }
38
Russ Coxf2b5a072011-01-19 23:09:00 -050039 var i complex64 = 6i
Ken Thompson7d4b1e42010-03-02 18:32:11 -080040 if i != I {
Rob Pike325cf8e2010-03-24 16:46:53 -070041 println("opcode 2", i, I)
42 panic("fail")
Ken Thompson7d4b1e42010-03-02 18:32:11 -080043 }
44
45 c1 := r + i
46 if c1 != C1 {
Rob Pike325cf8e2010-03-24 16:46:53 -070047 println("opcode x", c1, C1)
48 panic("fail")
Ken Thompson7d4b1e42010-03-02 18:32:11 -080049 }
50
51 c2 := r - i
52 if c2 != C2 {
Rob Pike325cf8e2010-03-24 16:46:53 -070053 println("opcode x", c2, C2)
54 panic("fail")
Ken Thompson7d4b1e42010-03-02 18:32:11 -080055 }
56
57 c3 := -(r + i)
58 if c3 != C3 {
Rob Pike325cf8e2010-03-24 16:46:53 -070059 println("opcode x", c3, C3)
60 panic("fail")
Ken Thompson7d4b1e42010-03-02 18:32:11 -080061 }
62
63 c4 := -(r - i)
64 if c4 != C4 {
Rob Pike325cf8e2010-03-24 16:46:53 -070065 println("opcode x", c4, C4)
66 panic("fail")
Ken Thompson7d4b1e42010-03-02 18:32:11 -080067 }
68
69 c5 := c1 + r
70 if c5 != C5 {
Rob Pike325cf8e2010-03-24 16:46:53 -070071 println("opcode x", c5, C5)
72 panic("fail")
Ken Thompson7d4b1e42010-03-02 18:32:11 -080073 }
74
75 c6 := c1 + i
76 if c6 != C6 {
Rob Pike325cf8e2010-03-24 16:46:53 -070077 println("opcode x", c6, C6)
78 panic("fail")
Ken Thompson7d4b1e42010-03-02 18:32:11 -080079 }
80
81 ca := c5 + c6
82 if ca != Ca {
Rob Pike325cf8e2010-03-24 16:46:53 -070083 println("opcode x", ca, Ca)
84 panic("fail")
Ken Thompson7d4b1e42010-03-02 18:32:11 -080085 }
86
87 cb := c5 - c6
88 if cb != Cb {
Rob Pike325cf8e2010-03-24 16:46:53 -070089 println("opcode x", cb, Cb)
90 panic("fail")
Ken Thompson7d4b1e42010-03-02 18:32:11 -080091 }
92
93 cc := c5 * c6
94 if cc != Cc {
Rob Pike325cf8e2010-03-24 16:46:53 -070095 println("opcode x", cc, Cc)
96 panic("fail")
Ken Thompson7d4b1e42010-03-02 18:32:11 -080097 }
98
99 cd := c5 / c6
100 if cd != Cd {
Rob Pike325cf8e2010-03-24 16:46:53 -0700101 println("opcode x", cd, Cd)
102 panic("fail")
Ken Thompson7d4b1e42010-03-02 18:32:11 -0800103 }
104
105 ce := cd * c6
106 if ce != Ce {
Rob Pike325cf8e2010-03-24 16:46:53 -0700107 println("opcode x", ce, Ce)
108 panic("fail")
Ken Thompson7d4b1e42010-03-02 18:32:11 -0800109 }
Russ Coxad7dea12011-09-19 11:50:53 -0400110
111 r32 := real(complex64(ce))
112 if r32 != float32(real(Ce)) {
113 println("real(complex64(ce))", r32, real(Ce))
114 panic("fail")
115 }
116
117 r64 := real(complex128(ce))
118 if r64 != real(Ce) {
119 println("real(complex128(ce))", r64, real(Ce))
120 panic("fail")
121 }
Ken Thompson7d4b1e42010-03-02 18:32:11 -0800122}