1. 程式人生 > >Linux相關——手寫測試程序

Linux相關——手寫測試程序

lee linux \n 測試 pri 等於 bits 選擇 return

由於本人太弱,,,不會lemon,,,也不會在ubuntu下安裝lemon,所以我選擇手寫測試程序emmmm

首先要寫這個東西我們要先知道對拍怎麽寫。

 1     for(int i = 1; i <= 1000; i++)
 2     {
 3         system("./make >in.in");
 4         system("./work >out.out");
 5         system("./work1 >out1.out");
 6         if(system("diff -bB out.out out1.out"
)) 7 { 8 printf("error in %d\n", i); 9 break; 10 } 11 else 12 { 13 printf("passed... %d\n", i); 14 system("sleep 1"); 15 } 16 }

那麽我們的測試程序就是基於這個對拍程序改的。

因為system裏面的都是字符串,因此我們要用到字符串,但怎麽用呢?

我們可以用一些小字符串來拼湊出一個大字符串。比如這樣:

1         s = "./work < " + tmp + ".in";

其中s和tmp都是string。

tmp即代表當前測試的數據組數。

因為通常我們的數據包是這樣的:1.in 1.out 2.in 2.out……

因為後綴相同,所以我們只需要用tmp存下前面的數字就好了。那麽我們要怎麽獲取呢?

 1 void get(int x)
 2 {
 3     tot = 0;
 4     while(x) m[++tot] = x % 10, x /= 10;
 5     tmp = "\0";
 6     for(R i = tot; i; i --)
7 { 8 tmp += m[i] + 0; 9 } 10 }

因為tmp也是字符串,所以我們可以手寫一個get函數,來實現把數x變為字符串後放入tmp

值得註意的是,字符串的初始化不能直接等於0,(雖然我看網上好多blog都是直接=0,但是我這麽用會報錯,,,我也不知到為什麽);

所以我們令tmp = "\0";

然後再把數放進去,放進去的方式也是和前面一樣的加入一個個的小字符串。

於是我們現在有了應該放在system("")裏的字符串,那麽我們要如何放進去呢?

 1     for(R i = 1; i <= 10; i++)
 2     {
 3         get(i);
 4         s = "./work < " + tmp + ".in";
 5         system(s.c_str());
 6         s = "diff -bB a.out " + tmp + ".out";
 7         if(system(s.c_str()))
 8         {
 9             printf("get %d points\n", (i - 1) * 10);
10             exit(0);  
11         }
12     }

我們可以直接使用.c_str()來獲取當前字符串的首字符地址,然後放入原本需要字符串的地方,註意不要 " " 哦。

放上完整代碼:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define R register int
 4 string s,tmp;
 5 int m[10], tot;
 6 
 7 void get(int x)
 8 {
 9     tot = 0;
10     while(x) m[++tot] = x % 10, x /= 10;
11     tmp = "\0";
12     for(R i = tot; i; i --)
13     {
14         tmp += m[i] + 0;
15     }
16 }
17 
18 int main()
19 {
20     for(R i = 1; i <= 10; i++)
21     {
22         get(i);
23         s = "./work < " + tmp + ".in";
24         system(s.c_str());
25         s = "diff -bB a.out " + tmp + ".out";
26         if(system(s.c_str()))
27         {
28             printf("get %d points\n", (i - 1) * 10);
29             exit(0);  
30         }
31     }
32     printf("get 100 points!!!??\n");
33     return 0;
34 }

上面那個表情只是來賣萌的O__O "…

Linux相關——手寫測試程序