Linux相關——手寫測試程序
阿新 • • 發佈:2018-07-21
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相關——手寫測試程序