/* this is a test file coded by gjm anything to be polished can be added. ./SysYFCompiler ../Student/task3/test_stu/01_test.sy -emit-ir -o ../Student/task3/test_stu/test_stu.ll */ int check = -1; int test_scope = 3; const float arr1[10] = {1.0, 2.0, 3.0, 4.0}; // 测试数组常量定义 const int N = -1; int arr_global[N + 2 * 4 - 8 / 8] = {1, 2, 3, 4, 5, 6}; const int year = 2023, month = 12; // 测试int常量定义 const float pi = 3.14159, e = 2.71415; // 测试float常量定义 int test_void = 0; int test_short_cut = 0; int func1(int p) { int test_scope = 5; // 测试全局与局部作用域覆盖 return (test_scope + p); } float func2() // 测试float返回值 { float p = 0.8; return (p - 1); } void func3() { test_void = 1; ; return; } int func4() { int c = 70; while (c <= 70) { int d; d = 40; if (c < 100) { c = c + d; if (c > 100) { int e; e = -50; c = c + e; } } } return c; } int func5() { int i = 5, j = 7; while (i < 100) { i = i + 30; while (j < 100) { j = j + 6; } j = j - 100; } return j; } int func6() { test_short_cut = 1; return 0; } int bubblesort(int arr[], int n) { int i, j; i = 0; while (i < n - 1) { // Last i elements are already in place j = 0; while (j < n - i - 1) { if (arr[j] > arr[j + 1]) { int tmp; tmp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = tmp; } j = j + 1; } i = i + 1; } return 0; } int mul(int a0[],int a1[], int a2[],int b0[],int b1[],int b2[],int c0[],int c1[],int c2[]) { int i; i=0; c0[0]=a0[0]*b0[0]+a0[1]*b1[0]+a0[2]*b2[0]; c0[1]=a0[0]*b0[1]+a0[1]*b1[1]+a0[2]*b2[1]; c0[2]=a0[0]*b0[2]+a0[1]*b1[2]+a0[2]*b2[2]; c1[0]=a1[0]*b0[0]+a1[1]*b1[0]+a1[2]*b2[0]; c1[1]=a1[0]*b0[1]+a1[1]*b1[1]+a1[2]*b2[1]; c1[2]=a1[0]*b0[2]+a1[1]*b1[2]+a1[2]*b2[2]; c2[0]=a2[0]*b0[0]+a2[1]*b1[0]+a2[2]*b2[0]; c2[1]=a2[0]*b0[1]+a2[1]*b1[1]+a2[2]*b2[1]; c2[2]=a2[0]*b0[2]+a2[1]*b1[2]+a2[2]*b2[2]; return 0; } int main() { int i = 0; // 通过修改i测试不同语句测试, 若check正确都是返回正值,错误返回负值-1 if (!i) { int a, b; a = 2; b = func1(a) * 8 / 14; if (b == 4) check = 0; else { { } // 测试空语句块 return -1; } } i = i + 1; if (i == 1) { int a = 1; float b = a + func2(); // 测试类型转换 if (b == 0.8) check = 1; else return -1; } i = i + 1; if (i == 2) { float arr2[10] = {0.1, 0.2, 0.3}; float arr3[5] = {arr1[1], arr2[2], 0.4, 0.5}; if (arr3[0] == 2.0 && arr3[1] != 0.1) // 测试条件判断和数组初始化 check = 2; else return -1; } i = i + 1; if (i == 3) { if (arr_global[2] == 3) check = 3; // 测试全局数组的数组长度计算 else return (arr_global[2] - arr_global[2] - 1); } i = i + 1; if (i == 4) { int a[4] = {1, 2, 3, 4}; int b[3] = {a[0] + a[1], a[1] * a[2]}; // 测试数组用左值计算表达式赋值 if (b[1] == 6) check = 4; else return -1; } i = i + 1; if (i == 5) { const int mss = 0xffff; const int MAX = 114514; // 测试十六进制和八进制 if (mss == 65535 && MAX == 0337522) check = 5; else return -1; } i = i + 1; if (i == 6) { int i = 10; if (i < 20 || func6()) // 测试短路计算 { if (test_short_cut == 0) check = 6; else return -1; } else { return -1; } } i = i + 1; if (i == 7) { int a = 2023, b = 12; // 测试if嵌套 if (a == year) if (b == month) check = 7; else return -1; else return -1; } i = i + 1; if (i == 8) { func3(); // 测试void函数 if (test_void == 1) check = 8; else return -1; } i = i + 1; if (i == 9) { int p; p = func4(); // 测试while-if嵌套 if (p == 100) check = 9; else return -1; } i = i + 1; if (i == 10) { if (!(func5() - 3)) // 测试while嵌套 check = 10; else return -1; } i = i + 1; if (i == 11) { int j = 0, sum = 0; while (j < 100) { if (j == 50) { break; // 测试break语句 } sum = sum + j; j = j + 1; } if (sum != 1225) return -1; else check = 11; } i = i + 1; if (i == 12) { int j = 0, sum = 0; while (j < 100) { if (j == 50) { j = j + 1; continue; // 测试continue语句 } sum = sum + j; j = j + 1; } if (sum != 4900) return -1; else check = 12; } i = i + 1; if (i == 13) { int a = 10; if (+-!!!a) // 测试单目运算符和非号条件判断 { a = - - -1; return a; } else // 测试else分支 { check = 13; } } i = i + 1; if (i == 14) { const int a = 0xf; const int b = 0xc; if ((a + b + 075) == 88) // 测试非十进制数值计算 check = 14; else return -1; } i = i + 1; if (i == 15) { int a = 5, b = 5, c = 1, d = -2; int result; result = ((d % 2 + 67) + -(a - b) - -((c + 2) % 2)); // 测试复杂表达式计算 result = result - 68; if (!result) check = 15; else return -1; } i = i + 1; if (i == 16) { int a[10]; a[0] = 4;a[1] = 3;a[2] = 9;a[3] = 2;a[4] = 0; a[5] = 1;a[6] = 6;a[7] = 5;a[8] = 7;a[9] = 8; int i; int n = 10; i = bubblesort(a, n); while (i < n) { int tmp; tmp = a[i]; //putint(tmp); tmp = 10; //putch(tmp); //换行 i = i + 1; } } i = i + 1; // if( i == 17 ) // { // int a0[3];int a1[3]; int a2[3];int b0[3];int b1[3];int b2[3];int c0[6];int c1[3];int c2[3]; // int i; // i=0; // while(i<3) // { // a0[i]=i;a1[i]=i;a2[i]=i;b0[i]=i;b1[i]=i;b2[i]=i;i=i+1; // } // i=mul( a0, a1, a2, b0, b1, b2, c0, c1, c2); // int x; // while(i<3) // { // x = c0[i]; // putint(x); // i=i+1; // } // x = 10;i=0; // putch(x); // while(i<3) // { // x = c1[i]; // putint(x); // i=i+1; // } // x = 10;i=0; // putch(x); // while(i<3) // { // x = c2[i]; // putint(x); // i=i+1; // } // x = 10;putch(x); // } i = i + 1; // if(i == 18) // { // int i, sum; // int a[10]; // sum=0;i=0; // while(i<10) // { // a[i]=i+1; // i=i+1; // } // int x,high,low,mid; // int n = 10; // x=5; //待查找数1-10之间 // high=n-1; // low=0; // mid=(high+low)/2; // while(a[mid]!=x && low < high) // { // mid=(high+low)/2; // if(x