Initial release of Maemo 5 port of gnuplot
[gnuplot] / src / bf_test.c
diff --git a/src/bf_test.c b/src/bf_test.c
new file mode 100644 (file)
index 0000000..55f2226
--- /dev/null
@@ -0,0 +1,168 @@
+#ifndef lint
+static char *RCSid() { return RCSid("$Id: bf_test.c,v 1.9.4.1 2007/10/02 18:20:30 sfeam Exp $"); }
+#endif
+
+
+/*
+ * Test routines for binary files
+ * cc bf_test.c -o bf_test binary_files.o -lm
+ *
+ * Copyright (c) 1992 Robert K. Cunningham, MIT Lincoln Laboratory
+ *
+ */
+
+/* Note that this file is not compiled into gnuplot, and so
+ * its more-restrictive copyright need not apply to gnuplot
+ * as a whole. (I think.)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define GPFAR /**/
+
+#include "syscfg.h"
+#include "stdfn.h"
+#include "binary.h"
+
+/* we declare these here instead of including more header files */
+void int_error __PROTO((int, const char *));
+void FreeHelp __PROTO((void));
+
+/* static functions */
+static float function __PROTO((int p, double x, double y));
+
+
+typedef struct {
+  float xmin, xmax;
+  float ymin, ymax;
+} range;
+
+#define NUM_PLOTS 2
+static range TheRange[] = {{-3,3,-2,2},
+                          {-3,3,-3,3},
+                          {-3,3,-3,3}}; /* Sampling rate causes this to go from -3:6*/
+
+/*---- Stubs to make this work without including huge libraries ----*/
+void
+int_error(int dummy, const char *error_text)
+{
+    (void) dummy;              /* avoid -Wunused warning */
+    fprintf(stderr, "Fatal error..\n%s\n...now exiting to system ...\n",
+           error_text);
+    exit(EXIT_FAILURE);
+}
+
+
+void
+FreeHelp()
+{
+}
+
+/*---- End of stubs ----*/
+
+
+static float
+function(int p, double x, double y)
+{
+    float t = 0;                       /* HBB 990828: initialize */
+
+    switch (p) {
+    case 0:
+       t = 1.0 / (x * x + y * y + 1.0);
+       break;
+    case 1:
+       t = sin(x * x + y * y) / (x * x + y * y);
+       if (t > 1.0)
+           t = 1.0;
+       break;
+    case 2:
+       t = sin(x * x + y * y) / (x * x + y * y);
+       /* sinc modulated sinc */
+       t *= sin(4. * (x * x + y * y)) / (4. * (x * x + y * y));
+       if (t > 1.0)
+           t = 1.0;
+       break;
+    default:
+       fprintf(stderr, "Unknown function\n");
+       break;
+    }
+    return t;
+}
+
+#define ISOSAMPLES 5.0
+
+int
+main(void)
+{
+    int plot;
+    int i, j;
+    float x, y;
+    float *rt, *ct;
+    float **m;
+    int xsize, ysize;
+    char buf[256];
+    FILE *fout;
+/*  Create a few standard test interfaces */
+
+    for (plot = 0; plot < NUM_PLOTS; plot++) {
+       xsize = (TheRange[plot].xmax - TheRange[plot].xmin) * ISOSAMPLES + 1;
+       ysize = (TheRange[plot].ymax - TheRange[plot].ymin) * ISOSAMPLES + 1;
+
+       rt = alloc_vector(0, xsize - 1);
+       ct = alloc_vector(0, ysize - 1);
+       m = matrix(0, xsize - 1, 0, ysize - 1);
+
+       for (y = TheRange[plot].ymin, j = 0; j < ysize; j++, y += 1.0 / (double) ISOSAMPLES) {
+           ct[j] = y;
+       }
+
+       for (x = TheRange[plot].xmin, i = 0; i < xsize; i++, x += 1.0 / (double) ISOSAMPLES) {
+           rt[i] = x;
+           for (y = TheRange[plot].ymin, j = 0; j < ysize; j++, y += 1.0 / (double) ISOSAMPLES) {
+               m[i][j] = function(plot, x, y);
+           }
+       }
+
+       sprintf(buf, "binary%d", plot + 1);
+       if (!(fout = fopen(buf, "wb")))
+           int_error(0, "Could not open file");
+       else {
+           fwrite_matrix(fout, m, 0, xsize - 1, 0, ysize - 1, rt, ct);
+       }
+       free_vector(rt, 0);
+       free_vector(ct, 0);
+       free_matrix(m, 0, xsize - 1, 0);
+    }
+
+    /* Show that it's ok to vary sampling rate, as long as x1<x2, y1<y2... */
+    xsize = (TheRange[plot].xmax - TheRange[plot].xmin) * ISOSAMPLES + 1;
+    ysize = (TheRange[plot].ymax - TheRange[plot].ymin) * ISOSAMPLES + 1;
+
+    rt = alloc_vector(0, xsize - 1);
+    ct = alloc_vector(0, ysize - 1);
+    m = matrix(0, xsize - 1, 0, ysize - 1);
+
+    for (y = TheRange[plot].ymin, j = 0; j < ysize; j++, y += 1.0 / (double) ISOSAMPLES) {
+       ct[j] = y > 0 ? 2 * y : y;
+    }
+    for (x = TheRange[plot].xmin, i = 0; i < xsize; i++, x += 1.0 / (double) ISOSAMPLES) {
+       rt[i] = x > 0 ? 2 * x : x;
+       for (y = TheRange[plot].ymin, j = 0; j < ysize; j++, y += 1.0 / (double) ISOSAMPLES) {
+           m[i][j] = function(plot, x, y);
+       }
+    }
+
+    sprintf(buf, "binary%d", plot + 1);
+    if (!(fout = fopen(buf, "wb")))
+       int_error(0, "Could not open file");
+    else {
+       fwrite_matrix(fout, m, 0, xsize - 1, 0, ysize - 1, rt, ct);
+    }
+    free_vector(rt, 0);
+    free_vector(ct, 0);
+    free_matrix(m, 0, xsize - 1, 0);
+
+    return EXIT_SUCCESS;
+}