我有一組* .in文件和一組帶有匹配文件名的* .soln文件。我想用* .in文件作爲輸入運行我的程序,並將輸出與* .soln文件中的輸出進行比較。什麼是最好的方式去做這件事?我可以想到3個選項。使用輸入文件和輸出解決方案進行測試的腳本
- 在Java中編寫一些驅動程序以列出文件夾中的文件,運行該程序並進行比較。這將是困難和困難的。
- 編寫一個bash腳本來做到這一點。怎麼樣?
- 寫一個python腳本來做到這一點?
我有一組* .in文件和一組帶有匹配文件名的* .soln文件。我想用* .in文件作爲輸入運行我的程序,並將輸出與* .soln文件中的輸出進行比較。什麼是最好的方式去做這件事?我可以想到3個選項。使用輸入文件和輸出解決方案進行測試的腳本
我會去bash解決方案。此外,考慮到您正在做的是測試,我總是會保存myprogram
的輸出,以便在出現故障時始終將輸出與其進行比較。
#!/bin/bash
for infile in *.in; do
basename=${infile%.*}
myprogram $infile > $basename.output
diff $basename.output $basename.soln
done
根據報告的要求添加檢查或退出狀態等。
如果程序存在,我懷疑bash腳本是最好的選擇。 如果您SOLN文件被命名權,一些類型的循環一樣
爲基礎*文件.soln 做 myprogram> new_ $文件來完成
當然 差異$文件new_ $文件 ,你可以檢查差異的退出代碼和 做各種其他事情來創建測試報告。 。 。
對我來說這看起來最簡單。 。 。
Karl
這主要是一個問題,需要使用最少邏輯的文件系統。 Bash對於這樣的問題不是一個不錯的選擇。如果事實證明你想要做一些比平等比較更復雜的事情,那麼Python就成了一個更有吸引力的選擇。對於像這樣的一次性腳本,Java似乎不是一個好選擇。
基本bash的實現可能是這個樣子:
cd dir_with_files
program=your_program
input_ext=".in"
compare_to_ext=".soIn"
for file in *$from_extension; do
diff <("$program" "$i") "${file:0:$((${#file}-3))}$compare_to_ext"
done
未經檢驗。