|
|
|
|
/* 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<a[mid])
|
|
|
|
|
// high=mid-1;
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// low = mid +1;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// if(x==a[mid])
|
|
|
|
|
// putint(x);
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// x = -1;
|
|
|
|
|
// putint(x);
|
|
|
|
|
// }
|
|
|
|
|
// x = 10;
|
|
|
|
|
// putch(x);
|
|
|
|
|
// }
|
|
|
|
|
return check;
|
|
|
|
|
}
|