177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// Test floating point operations.
277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid unaryOps() {
477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    // Unary ops
577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("-%g = %g\n", 1.1, -1.1);
677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("!%g = %d\n", 1.2, !1.2);
777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("!%g = %d\n", 0.0, !0.0);
877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
1077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid binaryOps() {
1177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("double op double:\n");
1277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g + %g = %g\n", 1.0, 2.0, 1.0 + 2.0);
1377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g - %g = %g\n", 1.0, 2.0, 1.0 - 2.0);
1477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g * %g = %g\n", 1.0, 2.0, 1.0 * 2.0);
1577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g / %g = %g\n", 1.0, 2.0, 1.0 / 2.0);
1677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
1777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("float op float:\n");
1877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g + %g = %g\n", 1.0f, 2.0f, 1.0f + 2.0f);
1977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g - %g = %g\n", 1.0f, 2.0f, 1.0f - 2.0f);
2077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g * %g = %g\n", 1.0f, 2.0f, 1.0f * 2.0f);
2177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g / %g = %g\n", 1.0f, 2.0f, 1.0f / 2.0f);
2277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("double op float:\n");
2477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g + %g = %g\n", 1.0, 2.0f, 1.0 + 2.0f);
2577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g - %g = %g\n", 1.0, 2.0f, 1.0 - 2.0f);
2677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g * %g = %g\n", 1.0, 2.0f, 1.0 * 2.0f);
2777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g / %g = %g\n", 1.0, 2.0f, 1.0 / 2.0f);
2877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("double op int:\n");
3077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g + %d = %g\n", 1.0, 2, 1.0 + 2);
3177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g - %d = %g\n", 1.0, 2, 1.0 - 2);
3277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g * %d = %g\n", 1.0, 2, 1.0 * 2);
3377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g / %d = %g\n", 1.0, 2, 1.0 / 2);
3477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
3577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("int op double:\n");
3677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%d + %g = %g\n", 1, 2.0, 1 + 2.0);
3777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%d - %g = %g\n", 1, 2.0, 1 - 2.0);
3877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%d * %g = %g\n", 1, 2.0, 1 * 2.0);
3977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%d / %g = %g\n", 1, 2.0, 1 / 2.0);
4077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
4177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
4277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid comparisonTestdd(double a, double b) {
4377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g op %g: < %d   <= %d   == %d   >= %d   > %d   != %d\n",
4477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao           a, b, a < b, a <= b, a == b, a >= b, a > b, a != b);
4577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
4677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
4777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid comparisonOpsdd() {
4877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("double op double:\n");
4977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonTestdd(1.0, 2.0);
5077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonTestdd(1.0, 1.0);
5177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonTestdd(2.0, 1.0);
5277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
5377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
5477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
5577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid comparisonTestdf(double a, float b) {
5677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g op %g: < %d   <= %d   == %d   >= %d   > %d   != %d\n",
5777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao           a, b, a < b, a <= b, a == b, a >= b, a > b, a != b);
5877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
5977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
6077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid comparisonOpsdf() {
6177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("double op float:\n");
6277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonTestdf(1.0, 2.0f);
6377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonTestdf(1.0, 1.0f);
6477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonTestdf(2.0, 1.0f);
6577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
6677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
6777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid comparisonTestff(float a, float b) {
6877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g op %g: < %d   <= %d   == %d   >= %d   > %d   != %d\n",
6977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao           a, b, a < b, a <= b, a == b, a >= b, a > b, a != b);
7077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
7177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
7277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid comparisonOpsff() {
7377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("float op float:\n");
7477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonTestff(1.0f, 2.0f);
7577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonTestff(1.0f, 1.0f);
7677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonTestff(2.0f, 1.0f);
7777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
7877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
7977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid comparisonTestid(int a, double b) {
8077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%d op %g: < %d   <= %d   == %d   >= %d   > %d   != %d\n",
8177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao           a, b, a < b, a <= b, a == b, a >= b, a > b, a != b);
8277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
8377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
8477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid comparisonOpsid() {
8577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("int op double:\n");
8677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonTestid(1, 2.0);
8777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonTestid(1, 1.0);
8877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonTestid(2, 1.0);
8977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
9077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid comparisonTestdi(double a, int b) {
9177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("%g op %d: < %d   <= %d   == %d   >= %d   > %d   != %d\n",
9277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao           a, b, a < b, a <= b, a == b, a >= b, a > b, a != b);
9377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
9477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
9577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid comparisonOpsdi() {
9677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("double op int:\n");
9777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonTestdi(1.0f, 2);
9877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonTestdi(1.0f, 1);
9977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonTestdi(2.0f, 1);
10077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
10177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
10277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid comparisonOps() {
10377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonOpsdd();
10477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonOpsdf();
10577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonOpsff();
10677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonOpsid();
10777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonOpsdi();
10877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
10977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
11077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoint branch(double d) {
11177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (d) {
11277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
11377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    }
11477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return 0;
11577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
11677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
11777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid testBranching() {
11877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("branching: %d %d %d\n", branch(-1.0), branch(0.0), branch(1.0));
11977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
12077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
12177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid 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) {
12277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    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);
12377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
12477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
12577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid 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) {
12677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    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);
12777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
12877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
12977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid 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) {
13077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    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);
13177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
13277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
13377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid testpassidf(int i, double d, float f) {
13477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    printf("testpassidf: %d %g %g\n", i, d, f);
13577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
13677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
13777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid testParameterPassing() {
13877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    float x;
13977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    testpassi(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
14077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    testpassf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
14177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    testpassd(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
14277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    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);
14377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    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);
14477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    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);
14577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    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);
14677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    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);
14777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    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);
14877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    testpassidf(1, 2.0, 3.0f);
14977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
15077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
15177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoint main() {
15277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    unaryOps();
15377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    binaryOps();
15477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    comparisonOps();
15577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    testBranching();
15677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    testParameterPassing();
15777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return 0;
15877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
159