modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/ken/cplx2.go (about)

     1  // run
     2  
     3  // Copyright 2010 The Go Authors. All rights reserved.
     4  // Use of this source code is governed by a BSD-style
     5  // license that can be found in the LICENSE file.
     6  
     7  // Test arithmetic on complex numbers, including multiplication and division.
     8  
     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  
    33  	var r complex64 = 5 + 0i
    34  	if r != R {
    35  		println("opcode 1", r, R)
    36  		panic("fail")
    37  	}
    38  
    39  	var i complex64 = 6i
    40  	if i != I {
    41  		println("opcode 2", i, I)
    42  		panic("fail")
    43  	}
    44  
    45  	c1 := r + i
    46  	if c1 != C1 {
    47  		println("opcode x", c1, C1)
    48  		panic("fail")
    49  	}
    50  
    51  	c2 := r - i
    52  	if c2 != C2 {
    53  		println("opcode x", c2, C2)
    54  		panic("fail")
    55  	}
    56  
    57  	c3 := -(r + i)
    58  	if c3 != C3 {
    59  		println("opcode x", c3, C3)
    60  		panic("fail")
    61  	}
    62  
    63  	c4 := -(r - i)
    64  	if c4 != C4 {
    65  		println("opcode x", c4, C4)
    66  		panic("fail")
    67  	}
    68  
    69  	c5 := c1 + r
    70  	if c5 != C5 {
    71  		println("opcode x", c5, C5)
    72  		panic("fail")
    73  	}
    74  
    75  	c6 := c1 + i
    76  	if c6 != C6 {
    77  		println("opcode x", c6, C6)
    78  		panic("fail")
    79  	}
    80  
    81  	ca := c5 + c6
    82  	if ca != Ca {
    83  		println("opcode x", ca, Ca)
    84  		panic("fail")
    85  	}
    86  
    87  	cb := c5 - c6
    88  	if cb != Cb {
    89  		println("opcode x", cb, Cb)
    90  		panic("fail")
    91  	}
    92  
    93  	cc := c5 * c6
    94  	if cc != Cc {
    95  		println("opcode x", cc, Cc)
    96  		panic("fail")
    97  	}
    98  
    99  	cd := c5 / c6
   100  	if cd != Cd {
   101  		println("opcode x", cd, Cd)
   102  		panic("fail")
   103  	}
   104  
   105  	ce := cd * c6
   106  	if ce != Ce {
   107  		println("opcode x", ce, Ce)
   108  		panic("fail")
   109  	}
   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  	}
   122  }