summaryrefslogtreecommitdiffstats
path: root/libacc/tests/data/flops.c
diff options
context:
space:
mode:
Diffstat (limited to 'libacc/tests/data/flops.c')
-rw-r--r--libacc/tests/data/flops.c158
1 files changed, 158 insertions, 0 deletions
diff --git a/libacc/tests/data/flops.c b/libacc/tests/data/flops.c
new file mode 100644
index 0000000..40b1b28
--- /dev/null
+++ b/libacc/tests/data/flops.c
@@ -0,0 +1,158 @@
+// Test floating point operations.
+
+void unaryOps() {
+ // Unary ops
+ printf("-%g = %g\n", 1.1, -1.1);
+ printf("!%g = %d\n", 1.2, !1.2);
+ printf("!%g = %d\n", 0.0, !0.0);
+}
+
+void binaryOps() {
+ printf("double op double:\n");
+ printf("%g + %g = %g\n", 1.0, 2.0, 1.0 + 2.0);
+ printf("%g - %g = %g\n", 1.0, 2.0, 1.0 - 2.0);
+ printf("%g * %g = %g\n", 1.0, 2.0, 1.0 * 2.0);
+ printf("%g / %g = %g\n", 1.0, 2.0, 1.0 / 2.0);
+
+ printf("float op float:\n");
+ printf("%g + %g = %g\n", 1.0f, 2.0f, 1.0f + 2.0f);
+ printf("%g - %g = %g\n", 1.0f, 2.0f, 1.0f - 2.0f);
+ printf("%g * %g = %g\n", 1.0f, 2.0f, 1.0f * 2.0f);
+ printf("%g / %g = %g\n", 1.0f, 2.0f, 1.0f / 2.0f);
+
+ printf("double op float:\n");
+ printf("%g + %g = %g\n", 1.0, 2.0f, 1.0 + 2.0f);
+ printf("%g - %g = %g\n", 1.0, 2.0f, 1.0 - 2.0f);
+ printf("%g * %g = %g\n", 1.0, 2.0f, 1.0 * 2.0f);
+ printf("%g / %g = %g\n", 1.0, 2.0f, 1.0 / 2.0f);
+
+ printf("double op int:\n");
+ printf("%g + %d = %g\n", 1.0, 2, 1.0 + 2);
+ printf("%g - %d = %g\n", 1.0, 2, 1.0 - 2);
+ printf("%g * %d = %g\n", 1.0, 2, 1.0 * 2);
+ printf("%g / %d = %g\n", 1.0, 2, 1.0 / 2);
+
+ printf("int op double:\n");
+ printf("%d + %g = %g\n", 1, 2.0, 1 + 2.0);
+ printf("%d - %g = %g\n", 1, 2.0, 1 - 2.0);
+ printf("%d * %g = %g\n", 1, 2.0, 1 * 2.0);
+ printf("%d / %g = %g\n", 1, 2.0, 1 / 2.0);
+}
+
+void comparisonTestdd(double a, double b) {
+ printf("%g op %g: < %d <= %d == %d >= %d > %d != %d\n",
+ a, b, a < b, a <= b, a == b, a >= b, a > b, a != b);
+}
+
+void comparisonOpsdd() {
+ printf("double op double:\n");
+ comparisonTestdd(1.0, 2.0);
+ comparisonTestdd(1.0, 1.0);
+ comparisonTestdd(2.0, 1.0);
+}
+
+
+void comparisonTestdf(double a, float b) {
+ printf("%g op %g: < %d <= %d == %d >= %d > %d != %d\n",
+ a, b, a < b, a <= b, a == b, a >= b, a > b, a != b);
+}
+
+void comparisonOpsdf() {
+ printf("double op float:\n");
+ comparisonTestdf(1.0, 2.0f);
+ comparisonTestdf(1.0, 1.0f);
+ comparisonTestdf(2.0, 1.0f);
+}
+
+void comparisonTestff(float a, float b) {
+ printf("%g op %g: < %d <= %d == %d >= %d > %d != %d\n",
+ a, b, a < b, a <= b, a == b, a >= b, a > b, a != b);
+}
+
+void comparisonOpsff() {
+ printf("float op float:\n");
+ comparisonTestff(1.0f, 2.0f);
+ comparisonTestff(1.0f, 1.0f);
+ comparisonTestff(2.0f, 1.0f);
+}
+
+void comparisonTestid(int a, double b) {
+ printf("%d op %g: < %d <= %d == %d >= %d > %d != %d\n",
+ a, b, a < b, a <= b, a == b, a >= b, a > b, a != b);
+}
+
+void comparisonOpsid() {
+ printf("int op double:\n");
+ comparisonTestid(1, 2.0);
+ comparisonTestid(1, 1.0);
+ comparisonTestid(2, 1.0);
+}
+void comparisonTestdi(double a, int b) {
+ printf("%g op %d: < %d <= %d == %d >= %d > %d != %d\n",
+ a, b, a < b, a <= b, a == b, a >= b, a > b, a != b);
+}
+
+void comparisonOpsdi() {
+ printf("double op int:\n");
+ comparisonTestdi(1.0f, 2);
+ comparisonTestdi(1.0f, 1);
+ comparisonTestdi(2.0f, 1);
+}
+
+void comparisonOps() {
+ comparisonOpsdd();
+ comparisonOpsdf();
+ comparisonOpsff();
+ comparisonOpsid();
+ comparisonOpsdi();
+}
+
+int branch(double d) {
+ if (d) {
+ return 1;
+ }
+ return 0;
+}
+
+void testBranching() {
+ printf("branching: %d %d %d\n", branch(-1.0), branch(0.0), branch(1.0));
+}
+
+void testpassi(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l) {
+ printf("testpassi: %d %d %d %d %d %d %d %d %d %d %d %d\n", a, b, c, d, e, f, g, h, i, j, k, l);
+}
+
+void testpassf(float a, float b, float c, float d, float e, float f, float g, float h, float i, float j, float k, float l) {
+ printf("testpassf: %g %g %g %g %g %g %g %g %g %g %g %g\n", a, b, c, d, e, f, g, h, i, j, k, l);
+}
+
+void testpassd(double a, double b, double c, double d, double e, double f, double g, double h, double i, double j, double k, double l) {
+ printf("testpassd: %g %g %g %g %g %g %g %g %g %g %g %g\n", a, b, c, d, e, f, g, h, i, j, k, l);
+}
+
+void testpassidf(int i, double d, float f) {
+ printf("testpassidf: %d %g %g\n", i, d, f);
+}
+
+void testParameterPassing() {
+ float x;
+ testpassi(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
+ testpassf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
+ testpassd(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
+ testpassi(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f);
+ testpassf(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f);
+ testpassd(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f);
+ testpassi(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0);
+ testpassf(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0);
+ testpassd(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0);
+ testpassidf(1, 2.0, 3.0f);
+}
+
+int main() {
+ unaryOps();
+ binaryOps();
+ comparisonOps();
+ testBranching();
+ testParameterPassing();
+ return 0;
+}