Russ Cox | d2cc988 | 2012-02-16 23:50:37 -0500 | [diff] [blame] | 1 | // run |
Ken Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 2 | |
Ken Thompson | f229c8b | 2010-03-09 12:49:24 -0800 | [diff] [blame] | 3 | // Copyright 2010 The Go Authors. All rights reserved. |
Ken Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 4 | // Use of this source code is governed by a BSD-style |
| 5 | // license that can be found in the LICENSE file. |
| 6 | |
Rob Pike | eb37b5b | 2012-02-24 16:24:24 +1100 | [diff] [blame] | 7 | // Test arithmetic on complex numbers, including multiplication and division. |
| 8 | |
Ken Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 9 | package main |
| 10 | |
| 11 | const ( |
| 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 | |
| 31 | func main() { |
| 32 | |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 33 | var r complex64 = 5 + 0i |
Ken Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 34 | if r != R { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 35 | println("opcode 1", r, R) |
| 36 | panic("fail") |
Ken Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 37 | } |
| 38 | |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 39 | var i complex64 = 6i |
Ken Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 40 | if i != I { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 41 | println("opcode 2", i, I) |
| 42 | panic("fail") |
Ken Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 43 | } |
| 44 | |
| 45 | c1 := r + i |
| 46 | if c1 != C1 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 47 | println("opcode x", c1, C1) |
| 48 | panic("fail") |
Ken Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 49 | } |
| 50 | |
| 51 | c2 := r - i |
| 52 | if c2 != C2 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 53 | println("opcode x", c2, C2) |
| 54 | panic("fail") |
Ken Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 55 | } |
| 56 | |
| 57 | c3 := -(r + i) |
| 58 | if c3 != C3 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 59 | println("opcode x", c3, C3) |
| 60 | panic("fail") |
Ken Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 61 | } |
| 62 | |
| 63 | c4 := -(r - i) |
| 64 | if c4 != C4 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 65 | println("opcode x", c4, C4) |
| 66 | panic("fail") |
Ken Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 67 | } |
| 68 | |
| 69 | c5 := c1 + r |
| 70 | if c5 != C5 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 71 | println("opcode x", c5, C5) |
| 72 | panic("fail") |
Ken Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 73 | } |
| 74 | |
| 75 | c6 := c1 + i |
| 76 | if c6 != C6 { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 77 | println("opcode x", c6, C6) |
| 78 | panic("fail") |
Ken Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 79 | } |
| 80 | |
| 81 | ca := c5 + c6 |
| 82 | if ca != Ca { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 83 | println("opcode x", ca, Ca) |
| 84 | panic("fail") |
Ken Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 85 | } |
| 86 | |
| 87 | cb := c5 - c6 |
| 88 | if cb != Cb { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 89 | println("opcode x", cb, Cb) |
| 90 | panic("fail") |
Ken Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 91 | } |
| 92 | |
| 93 | cc := c5 * c6 |
| 94 | if cc != Cc { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 95 | println("opcode x", cc, Cc) |
| 96 | panic("fail") |
Ken Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 97 | } |
| 98 | |
| 99 | cd := c5 / c6 |
| 100 | if cd != Cd { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 101 | println("opcode x", cd, Cd) |
| 102 | panic("fail") |
Ken Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 103 | } |
| 104 | |
| 105 | ce := cd * c6 |
| 106 | if ce != Ce { |
Rob Pike | 325cf8e | 2010-03-24 16:46:53 -0700 | [diff] [blame] | 107 | println("opcode x", ce, Ce) |
| 108 | panic("fail") |
Ken Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 109 | } |
Russ Cox | ad7dea1 | 2011-09-19 11:50:53 -0400 | [diff] [blame] | 110 | |
| 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 Thompson | 7d4b1e4 | 2010-03-02 18:32:11 -0800 | [diff] [blame] | 122 | } |