Description:
fix bugs: paths, check compilation error, all_tests.cfg.erb git-svn-id: http://theory.cpe.ku.ac.th/grader/cli/trunk/scripts@15 6386c4cd-e34a-4fa8-8920-d93eb39b512e
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r3:4a517b89268a - - 4 files changed: 24 inserted, 18 deleted

@@ -0,0 +1,13
1 + problem do
2 + num_tests <%= num_testcases %>
3 + full_score <%= num_testcases*10 %>
4 + time_limit_each <%= options[:time_limit] %>
5 + mem_limit_each <%= options[:mem_limit] %>
6 + score_each 10
7 +
8 + <% 1.upto(num_testcase) do |i| %>
9 + run <%= i %>
10 + tests <%= i %>
11 + end
12 + <% end %>
13 + end
@@ -77,33 +77,35
77 source_name = "#{problem.name}.#{lang_ext}"
77 source_name = "#{problem.name}.#{lang_ext}"
78
78
79 save_source(sub,problem_out_dir,source_name)
79 save_source(sub,problem_out_dir,source_name)
80 call_judge(problem_home,language,problem_out_dir,source_name)
80 call_judge(problem_home,language,problem_out_dir,source_name)
81 save_result(sub,read_result("#{problem_out_dir}/test-result"))
81 save_result(sub,read_result("#{problem_out_dir}/test-result"))
82 end
82 end
83
83
84 # reading environment
84 # reading environment
85 GRADER_ENV = 'exam'
85 GRADER_ENV = 'exam'
86 if ARGV.length > 1
86 if ARGV.length > 1
87 GRADER_ENV = ARGV[1]
87 GRADER_ENV = ARGV[1]
88 end
88 end
89 require File.dirname(__FILE__) + "/environment.rb"
89 require File.dirname(__FILE__) + "/environment.rb"
90
90
91 #main program
91 #main program
92
92
93 talk 'Reading rails environment'
93 talk 'Reading rails environment'
94
94
95 RAILS_ENV = 'development'
95 RAILS_ENV = 'development'
96 require RAILS_APP_DIR + '/config/environment'
96 require RAILS_APP_DIR + '/config/environment'
97
97
98 current_dir = `pwd`
98 current_dir = `pwd`
99
99
100 talk 'Grader queue'
100 talk 'Grader queue'
101 - task = Task.find(:first, :order => 'created_at')
101 + while true
102 - if task!=nil
102 + task = Task.find(:first, :order => 'created_at')
103 - grade(task.submission_id)
103 + if task!=nil
104 - task.destroy
104 + grade(task.submission_id)
105 - else
105 + task.destroy
106 - puts "No job"
106 + else
107 + sleep(1)
108 + end
107 end
109 end
108
110
109
111
@@ -49,41 +49,32
49 num_testcases = ARGV[2].to_i
49 num_testcases = ARGV[2].to_i
50
50
51 options = {:time_limit => 1, :mem_limit => 16}
51 options = {:time_limit => 1, :mem_limit => 16}
52 process_options(options)
52 process_options(options)
53
53
54 # start working
54 # start working
55 puts "creating directories"
55 puts "creating directories"
56
56
57 system("mkdir #{problem}")
57 system("mkdir #{problem}")
58 system("mkdir #{problem}/script")
58 system("mkdir #{problem}/script")
59 system("mkdir #{problem}/test_cases")
59 system("mkdir #{problem}/test_cases")
60 system("cp #{GRADER_DIR}/std-script/* #{problem}/script")
60 system("cp #{GRADER_DIR}/std-script/* #{problem}/script")
61
61
62 puts "copying testcases"
62 puts "copying testcases"
63
63
64 1.upto(num_testcases) do |i|
64 1.upto(num_testcases) do |i|
65 system("mkdir #{problem}/test_cases/#{i}")
65 system("mkdir #{problem}/test_cases/#{i}")
66 copy_testcase("#{testcase_dir}","#{problem}/test_cases/#{i}",i)
66 copy_testcase("#{testcase_dir}","#{problem}/test_cases/#{i}",i)
67 end
67 end
68
68
69
69
70 # generating all_tests.cfg
70 # generating all_tests.cfg
71 puts "generating testcase config file"
71 puts "generating testcase config file"
72
72
73 - template = %q{
73 + template = File.open("all_tests.cfg.erb").readlines
74 - problem do
75 - num_tests <%= num_testcases %>
76 - full_score <%= num_testcases*10 %>
77 - time_limit_each <%= options[:time_limit] %>
78 - mem_limit_each <%= options[:mem_limit] %>
79 - score_each 10
80 - end
81 - }
82 -
83 all_test_cfg = ERB.new(template)
74 all_test_cfg = ERB.new(template)
84
75
85 - cfg_file = File.open("#{problem}/test_cases/all_test.cfg","w")
76 + cfg_file = File.open("#{problem}/test_cases/all_tests.cfg","w")
86 cfg_file.puts all_test_cfg.result
77 cfg_file.puts all_test_cfg.result
87 cfg_file.close
78 cfg_file.close
88
79
89 puts "done"
80 puts "done"
@@ -50,49 +50,49
50
50
51 if ARGV.length >= 4
51 if ARGV.length >= 4
52 sandbox_dir = ARGV[3]
52 sandbox_dir = ARGV[3]
53 else
53 else
54 sandbox_dir = "#{current_dir}/sandbox"
54 sandbox_dir = "#{current_dir}/sandbox"
55 end
55 end
56 puts "Sandbox directory: #{sandbox_dir}"
56 puts "Sandbox directory: #{sandbox_dir}"
57 system("rm -Rf #{sandbox_dir}")
57 system("rm -Rf #{sandbox_dir}")
58 execute("mkdir #{sandbox_dir}", "Cannot make directory #{sandbox_dir}")
58 execute("mkdir #{sandbox_dir}", "Cannot make directory #{sandbox_dir}")
59
59
60 # Compile
60 # Compile
61 puts
61 puts
62 puts "Compiling..."
62 puts "Compiling..."
63 execute("cp #{source_file} #{sandbox_dir}", "Cannot copy the source file to #{sandbox_dir}")
63 execute("cp #{source_file} #{sandbox_dir}", "Cannot copy the source file to #{sandbox_dir}")
64 begin
64 begin
65 Dir.chdir sandbox_dir
65 Dir.chdir sandbox_dir
66 rescue
66 rescue
67 puts "ERROR: Cannot change directory to #{sandbox_dir}."
67 puts "ERROR: Cannot change directory to #{sandbox_dir}."
68 exit(127)
68 exit(127)
69 end
69 end
70 execute("#{problem_home}/script/compile #{language} #{source_file}", "Compilation error!")
70 execute("#{problem_home}/script/compile #{language} #{source_file}", "Compilation error!")
71 compile_message = `cat compiler_message`
71 compile_message = `cat compiler_message`
72 compile_message.strip!
72 compile_message.strip!
73 execute("mv compiler_message #{test_result_dir}", "Cannot move the compiler message to #{test_result_dir}.")
73 execute("mv compiler_message #{test_result_dir}", "Cannot move the compiler message to #{test_result_dir}.")
74 - if compile_message != ""
74 + if !FileTest.exist?("a.out")
75 puts "Cannot compile the source code. See message in #{test_result_dir}/compile_message"
75 puts "Cannot compile the source code. See message in #{test_result_dir}/compile_message"
76 exit(127)
76 exit(127)
77 else
77 else
78 execute("mv a.out #{test_result_dir}", "Cannot move the compiled program to #{test_result_dir}")
78 execute("mv a.out #{test_result_dir}", "Cannot move the compiled program to #{test_result_dir}")
79 system("rm -Rf #{sandbox_dir}/*")
79 system("rm -Rf #{sandbox_dir}/*")
80 end
80 end
81
81
82 require "#{problem_home}/script/test_dsl.rb"
82 require "#{problem_home}/script/test_dsl.rb"
83 load "#{problem_home}/test_cases/all_tests.cfg"
83 load "#{problem_home}/test_cases/all_tests.cfg"
84 problem = Problem.get_instance
84 problem = Problem.get_instance
85
85
86 if problem.well_formed? == false
86 if problem.well_formed? == false
87 puts "The problem specification is not well formed."
87 puts "The problem specification is not well formed."
88 exit(127)
88 exit(127)
89 end
89 end
90
90
91 # Doing the testing.
91 # Doing the testing.
92 (1..(problem.num_tests)).each do |test_num|
92 (1..(problem.num_tests)).each do |test_num|
93 puts
93 puts
94 execute("cp #{test_result_dir}/a.out #{sandbox_dir}", "Cannot copy the compiled program into #{sandbox_dir}")
94 execute("cp #{test_result_dir}/a.out #{sandbox_dir}", "Cannot copy the compiled program into #{sandbox_dir}")
95 execute("#{problem_home}/script/run #{language} #{test_num}", "Error occured during execution of the run script")
95 execute("#{problem_home}/script/run #{language} #{test_num}", "Error occured during execution of the run script")
96 execute("mkdir #{test_result_dir}/#{test_num}", "Cannot create directory #{test_result_dir}/#{test_num}")
96 execute("mkdir #{test_result_dir}/#{test_num}", "Cannot create directory #{test_result_dir}/#{test_num}")
97 execute("mv #{sandbox_dir}/result #{test_result_dir}/#{test_num}", "Cannot copy the result file into #{test_result_dir}/#{test_num}")
97 execute("mv #{sandbox_dir}/result #{test_result_dir}/#{test_num}", "Cannot copy the result file into #{test_result_dir}/#{test_num}")
98 execute("mv #{sandbox_dir}/comment #{test_result_dir}/#{test_num}", "Cannot copy the comment file into #{test_result_dir}/#{test_num}")
98 execute("mv #{sandbox_dir}/comment #{test_result_dir}/#{test_num}", "Cannot copy the comment file into #{test_result_dir}/#{test_num}")
You need to be logged in to leave comments. Login now