// 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. // This C program generates the file cmplxdivide1.go. It uses the // output of the operations by C99 as the reference to check // the implementation of complex numbers in Go. // The generated file, cmplxdivide1.go, is compiled along // with the driver cmplxdivide.go (the names are confusing // and unimaginative) to run the actual test. This is done by // the usual test runner. // // The file cmplxdivide1.go is checked in to the repository, but // if it needs to be regenerated, compile and run this C program // like this: // gcc '-std=c99' cmplxdivide.c && a.out >cmplxdivide1.go #include #include #include #include #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("// skip\n"); printf("// # generated by cmplxdivide.c\n"); printf("\n"); printf("package main\n"); printf("var tests = []Test{\n"); for(i=0; i