2009-06-13 97 views
0

我有一組* .in文件和一組帶有匹配文件名的* .soln文件。我想用* .in文件作爲輸入運行我的程序,並將輸出與* .soln文件中的輸出進行比較。什麼是最好的方式去做這件事?我可以想到3個選項。使用輸入文件和輸出解決方案進行測試的腳本

  1. 在Java中編寫一些驅動程序以列出文件夾中的文件,運行該程序並進行比較。這將是困難和困難的。
  2. 編寫一個bash腳本來做到這一點。怎麼樣?
  3. 寫一個python腳本來做到這一點?

回答

0

我會去bash解決方案。此外,考慮到您正在做的是測試,我總是會保存myprogram的輸出,以便在出現故障時始終將輸出與其進行比較。

#!/bin/bash 

for infile in *.in; do 
    basename=${infile%.*} 
    myprogram $infile > $basename.output 
    diff $basename.output $basename.soln 
done 

根據報告的要求添加檢查或退出狀態等。

0

如果程序存在,我懷疑bash腳本是最好的選擇。 如果您SOLN文件被命名權,一些類型的循環一樣

爲基礎*文件.soln 做 myprogram> new_ $文件來完成

當然 差異$文件new_ $文件 ,你可以檢查差異的退出代碼和 做各種其他事情來創建測試報告。 。 。

對我來說這看起來最簡單。 。 。

Karl

0

這主要是一個問題,需要使用最少邏輯的文件系統。 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 

未經檢驗。