Description:
Merge branch 'master' into windows
Commit status:
[Not Reviewed]
References:
merge default
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r125:430281f7813c - - 4 files changed: 23 inserted, 2 deleted

@@ -0,0 +1,3
1 + sandbox
2 + coverage
3 +
@@ -0,0 +1,14
1 + require 'rake'
2 + require 'spec/rake/spectask'
3 +
4 + desc "Run all examples"
5 + Spec::Rake::SpecTask.new('spec') do |t|
6 + t.spec_files = FileList['*spec.rb']
7 + end
8 +
9 + desc "Run all examples with RCov"
10 + Spec::Rake::SpecTask.new('spec_with_rcov') do |t|
11 + t.spec_files = FileList['*spec.rb']
12 + t.rcov = true
13 + t.rcov_opts = ['--exclude', '.*_spec\.rb']
14 + end
@@ -30,50 +30,50
30
30
31 # takes a submission, asks room_maker to produce grading directories,
31 # takes a submission, asks room_maker to produce grading directories,
32 # calls grader scripts, and asks reporter to save the result
32 # calls grader scripts, and asks reporter to save the result
33 def grade(submission)
33 def grade(submission)
34 current_dir = FileUtils.pwd
34 current_dir = FileUtils.pwd
35
35
36 user = submission.user
36 user = submission.user
37 problem = submission.problem
37 problem = submission.problem
38
38
39 # TODO: will have to create real exception for this
39 # TODO: will have to create real exception for this
40 if user==nil or problem == nil
40 if user==nil or problem == nil
41 @reporter.report_error(submission,"Grading error: problem with submission")
41 @reporter.report_error(submission,"Grading error: problem with submission")
42 #raise "engine: user or problem is nil"
42 #raise "engine: user or problem is nil"
43 end
43 end
44
44
45 # TODO: this is another hack so that output only task can be judged
45 # TODO: this is another hack so that output only task can be judged
46 if submission.language!=nil
46 if submission.language!=nil
47 language = submission.language.name
47 language = submission.language.name
48 lang_ext = submission.language.ext
48 lang_ext = submission.language.ext
49 else
49 else
50 language = 'c'
50 language = 'c'
51 lang_ext = 'c'
51 lang_ext = 'c'
52 end
52 end
53
53
54 - # FIX THIS
54 + # This is needed because older version of std-scripts/compile
55 - talk 'some hack on language'
55 + # only look for c++.
56 if language == 'cpp'
56 if language == 'cpp'
57 language = 'c++'
57 language = 'c++'
58 end
58 end
59
59
60 # COMMENT: should it be only source.ext?
60 # COMMENT: should it be only source.ext?
61 if problem!=nil
61 if problem!=nil
62 source_name = "#{problem.name}.#{lang_ext}"
62 source_name = "#{problem.name}.#{lang_ext}"
63 else
63 else
64 source_name = "source.#{lang_ext}"
64 source_name = "source.#{lang_ext}"
65 end
65 end
66
66
67 begin
67 begin
68 grading_dir = @room_maker.produce_grading_room(submission)
68 grading_dir = @room_maker.produce_grading_room(submission)
69 @room_maker.save_source(submission,source_name)
69 @room_maker.save_source(submission,source_name)
70 problem_home = @room_maker.find_problem_home(submission)
70 problem_home = @room_maker.find_problem_home(submission)
71
71
72 # puts "GRADING DIR: #{grading_dir}"
72 # puts "GRADING DIR: #{grading_dir}"
73 # puts "PROBLEM DIR: #{problem_home}"
73 # puts "PROBLEM DIR: #{problem_home}"
74
74
75 if !FileTest.exist?(problem_home)
75 if !FileTest.exist?(problem_home)
76 raise "No test data."
76 raise "No test data."
77 end
77 end
78
78
79 dinit = DirInit::Manager.new(problem_home)
79 dinit = DirInit::Manager.new(problem_home)
@@ -56,48 +56,52
56 params[param_name] = ARGV[index]
56 params[param_name] = ARGV[index]
57 else
57 else
58 params[param_name] = default
58 params[param_name] = default
59 end
59 end
60 talk "#{param_name}: #{params[param_name]}"
60 talk "#{param_name}: #{params[param_name]}"
61 end
61 end
62
62
63 # Remove any remaining output files or message files.
63 # Remove any remaining output files or message files.
64 if FileTest.exists? params[:output_file]
64 if FileTest.exists? params[:output_file]
65 FileUtils.rm(params[:output_file])
65 FileUtils.rm(params[:output_file])
66 end
66 end
67 if FileTest.exists? params[:message_file]
67 if FileTest.exists? params[:message_file]
68 FileUtils.rm(params[:message_file])
68 FileUtils.rm(params[:message_file])
69 end
69 end
70
70
71 # Check if the source file exists before attempt compiling.
71 # Check if the source file exists before attempt compiling.
72 if !FileTest.exists? params[:source_file]
72 if !FileTest.exists? params[:source_file]
73 talk("ERROR: The source file does not exist!")
73 talk("ERROR: The source file does not exist!")
74 open(params[:message_file],"w") do |f|
74 open(params[:message_file],"w") do |f|
75 f.puts "ERROR: The source file did not exist."
75 f.puts "ERROR: The source file did not exist."
76 end
76 end
77 exit(127)
77 exit(127)
78 end
78 end
79
79
80 + if params[:prog_lang]=='cpp':
81 + params[:prog_lang] = 'c++'
82 + end
83 +
80 # Compile.
84 # Compile.
81 case params[:prog_lang]
85 case params[:prog_lang]
82
86
83 when "c"
87 when "c"
84 command = "#{C_COMPILER} #{params[:source_file]} -o #{params[:output_file]} #{C_OPTIONS} 2> #{params[:message_file]}"
88 command = "#{C_COMPILER} #{params[:source_file]} -o #{params[:output_file]} #{C_OPTIONS} 2> #{params[:message_file]}"
85 system(command)
89 system(command)
86
90
87 when "c++"
91 when "c++"
88 command = "#{CPLUSPLUS_COMPILER} #{params[:source_file]} -o #{params[:output_file]} #{CPLUSPLUS_OPTIONS} 2> #{params[:message_file]}"
92 command = "#{CPLUSPLUS_COMPILER} #{params[:source_file]} -o #{params[:output_file]} #{CPLUSPLUS_OPTIONS} 2> #{params[:message_file]}"
89 system(command)
93 system(command)
90
94
91 when "pas"
95 when "pas"
92 command = "#{PASCAL_COMPILER} #{params[:source_file]} -ooutpas #{PASCAL_OPTIONS} > #{params[:message_file]}"
96 command = "#{PASCAL_COMPILER} #{params[:source_file]} -ooutpas #{PASCAL_OPTIONS} > #{params[:message_file]}"
93 system(command)
97 system(command)
94 FileUtils.mv("output", params[:output_file])
98 FileUtils.mv("output", params[:output_file])
95
99
96 else
100 else
97 talk("ERROR: Invalid language specified!")
101 talk("ERROR: Invalid language specified!")
98 open(params[:message_file],"w") do |f|
102 open(params[:message_file],"w") do |f|
99 f.puts "ERROR: Invalid language specified!"
103 f.puts "ERROR: Invalid language specified!"
100 end
104 end
101 exit(127)
105 exit(127)
102 end
106 end
103
107
You need to be logged in to leave comments. Login now