mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 22:04:21 +00:00
These are the standard complex multiplication/division functions required by the C standard (Annex G). Don't get me started on the standard's handling of complex-infinity...
54 lines
1.2 KiB
C
54 lines
1.2 KiB
C
#include <assert.h>
|
|
#include <complex.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
typedef struct {
|
|
int val;
|
|
} STest;
|
|
|
|
int getVal(STest* data) { return data->val; }
|
|
|
|
int main (int argc, char *argv[])
|
|
{
|
|
STest* data = (STest*)malloc(sizeof(STest));
|
|
data->val = 123;
|
|
|
|
assert(getVal(data) != 456);
|
|
int ok = (getVal(data) == 123);
|
|
|
|
if (argc > 1) {
|
|
fprintf(stdout, "val=%d\n", data->val);
|
|
}
|
|
|
|
free(data);
|
|
|
|
if (!ok) abort();
|
|
|
|
// Test some basic arithmetic from compiler-rt
|
|
{
|
|
double complex z = 0.0 + I * 4.0;
|
|
double complex w = 0.0 + I * 16.0;
|
|
double complex product = z * w;
|
|
double complex quotient = z / w;
|
|
|
|
if (!(creal(product) == -64.0)) abort();
|
|
if (!(cimag(product) == 0.0)) abort();
|
|
if (!(creal(quotient) == 0.25)) abort();
|
|
if (!(cimag(quotient) == 0.0)) abort();
|
|
}
|
|
|
|
{
|
|
float complex z = 4.0 + I * 4.0;
|
|
float complex w = 2.0 - I * 2.0;
|
|
float complex product = z * w;
|
|
float complex quotient = z / w;
|
|
|
|
if (!(creal(product) == 16.0)) abort();
|
|
if (!(cimag(product) == 0.0)) abort();
|
|
if (!(creal(quotient) == 0.0)) abort();
|
|
if (!(cimag(quotient) == 2.0)) abort();
|
|
}
|
|
|
|
return EXIT_SUCCESS;
|
|
}
|