diff options
Diffstat (limited to 'test/cmplxdivide.c')
-rw-r--r-- | test/cmplxdivide.c | 82 |
1 files changed, 0 insertions, 82 deletions
diff --git a/test/cmplxdivide.c b/test/cmplxdivide.c deleted file mode 100644 index b340f04d8..000000000 --- a/test/cmplxdivide.c +++ /dev/null @@ -1,82 +0,0 @@ -// 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. - -// gcc '-std=c99' cmplxdivide.c && a.out >cmplxdivide1.go - -#include <complex.h> -#include <math.h> -#include <stdio.h> -#include <string.h> - -#define nelem(x) (sizeof(x)/sizeof((x)[0])) - -double f[] = { - 0, - 1, - -1, - 2, - NAN, - INFINITY, - -INFINITY, -}; - -char* -fmt(double g) -{ - static char buf[10][30]; - static int n; - char *p; - - p = buf[n++]; - if(n == 10) - n = 0; - sprintf(p, "%g", g); - if(strcmp(p, "-0") == 0) - strcpy(p, "negzero"); - return p; -} - -int -iscnan(double complex d) -{ - return !isinf(creal(d)) && !isinf(cimag(d)) && (isnan(creal(d)) || isnan(cimag(d))); -} - -double complex zero; // attempt to hide zero division from gcc - -int -main(void) -{ - int i, j, k, l; - double complex n, d, q; - - printf("// # generated by cmplxdivide.c\n"); - printf("\n"); - printf("package main\n"); - printf("var tests = []Test{\n"); - for(i=0; i<nelem(f); i++) - for(j=0; j<nelem(f); j++) - for(k=0; k<nelem(f); k++) - for(l=0; l<nelem(f); l++) { - n = f[i] + f[j]*I; - d = f[k] + f[l]*I; - q = n/d; - - // BUG FIX. - // Gcc gets the wrong answer for NaN/0 unless both sides are NaN. - // That is, it treats (NaN+NaN*I)/0 = NaN+NaN*I (a complex NaN) - // but it then computes (1+NaN*I)/0 = Inf+NaN*I (a complex infinity). - // Since both numerators are complex NaNs, it seems that the - // results should agree in kind. Override the gcc computation in this case. - if(iscnan(n) && d == 0) - q = (NAN+NAN*I) / zero; - - printf("\tTest{complex(%s, %s), complex(%s, %s), complex(%s, %s)},\n", - fmt(creal(n)), fmt(cimag(n)), - fmt(creal(d)), fmt(cimag(d)), - fmt(creal(q)), fmt(cimag(q))); - } - printf("}\n"); - return 0; -} |