From 83af6e842ee09336e1af5b2c2a271252469785e4 Mon Sep 17 00:00:00 2001 From: Odeinjul Date: Mon, 18 Dec 2023 00:09:30 +0800 Subject: [PATCH] Add tests --- Student/task3/test/31_func_array.sy | 7 - Student/task3/test/31_long.out | 1 + Student/task3/test/31_long.sy | 396 ++++++++++++++++++++++++++++ 3 files changed, 397 insertions(+), 7 deletions(-) delete mode 100644 Student/task3/test/31_func_array.sy create mode 100644 Student/task3/test/31_long.out create mode 100644 Student/task3/test/31_long.sy diff --git a/Student/task3/test/31_func_array.sy b/Student/task3/test/31_func_array.sy deleted file mode 100644 index d56cc4c..0000000 --- a/Student/task3/test/31_func_array.sy +++ /dev/null @@ -1,7 +0,0 @@ -int main(){ - int a[5][2] = {1,{2,3},{4},{5,6,7}}; - int b[5][2] = {{1,0},{2,3},{4,0},{5,6},{7,0}}; - int i = a[3][1]; - int j = b[3][1]; - return i - j; -} diff --git a/Student/task3/test/31_long.out b/Student/task3/test/31_long.out new file mode 100644 index 0000000..3f10ffe --- /dev/null +++ b/Student/task3/test/31_long.out @@ -0,0 +1 @@ +15 \ No newline at end of file diff --git a/Student/task3/test/31_long.sy b/Student/task3/test/31_long.sy new file mode 100644 index 0000000..56ad39f --- /dev/null +++ b/Student/task3/test/31_long.sy @@ -0,0 +1,396 @@ +/* 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