most 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Copying.txt +679 -0
- data/History.txt +15 -0
- data/Manifest.txt +95 -0
- data/PostInstall.txt +6 -0
- data/Rakefile +44 -0
- data/Readme.rdoc +146 -0
- data/bin/most +31 -0
- data/lib/most.rb +52 -0
- data/lib/most/context.rb +244 -0
- data/lib/most/core.rb +171 -0
- data/lib/most/di/container.rb +148 -0
- data/lib/most/di/proxy.rb +55 -0
- data/lib/most/di/service.rb +63 -0
- data/lib/most/di/service_factory.rb +40 -0
- data/lib/most/environment.rb +67 -0
- data/lib/most/executor.rb +80 -0
- data/lib/most/helpers/array.rb +31 -0
- data/lib/most/helpers/hash.rb +25 -0
- data/lib/most/helpers/kernel.rb +35 -0
- data/lib/most/helpers/memory_out.rb +93 -0
- data/lib/most/helpers/numeric.rb +59 -0
- data/lib/most/helpers/object.rb +65 -0
- data/lib/most/helpers/symbol.rb +31 -0
- data/lib/most/interfaces/meta_programmable.rb +59 -0
- data/lib/most/starter.rb +126 -0
- data/lib/most/structures/box.rb +199 -0
- data/lib/most/structures/submission.rb +117 -0
- data/lib/most/structures/test_case.rb +173 -0
- data/lib/most/structures/test_runner.rb +103 -0
- data/lib/most/structures/types/options.rb +67 -0
- data/lib/most/structures/types/path.rb +39 -0
- data/lib/most/structures/types/report.rb +84 -0
- data/lib/most/submissions/cpp_memory_out_sample.rb +34 -0
- data/lib/most/submissions/cpp_sample.rb +36 -0
- data/lib/most/submissions/cpp_timeout_sample.rb +34 -0
- data/lib/most/submissions/cs_sample.rb +36 -0
- data/lib/most/submissions/erlang_sample.rb +36 -0
- data/lib/most/submissions/haskell_sample.rb +36 -0
- data/lib/most/submissions/java_sample.rb +36 -0
- data/lib/most/submissions/lisp_sample.rb +32 -0
- data/lib/most/submissions/lua_sample.rb +36 -0
- data/lib/most/submissions/ocaml_sample.rb +36 -0
- data/lib/most/submissions/pascal_sample.rb +36 -0
- data/lib/most/submissions/perl_sample.rb +32 -0
- data/lib/most/submissions/php_sample.rb +32 -0
- data/lib/most/submissions/python_sample.rb +32 -0
- data/lib/most/submissions/ruby_sample.rb +32 -0
- data/lib/most/submissions/vb_sample.rb +36 -0
- data/lib/most/tasks/general/win/cs.rb +60 -0
- data/lib/most/tasks/general/win/erlang.rb +86 -0
- data/lib/most/tasks/general/win/gcc.rb +39 -0
- data/lib/most/tasks/general/win/haskell.rb +75 -0
- data/lib/most/tasks/general/win/java.rb +72 -0
- data/lib/most/tasks/general/win/lisp.rb +59 -0
- data/lib/most/tasks/general/win/lua.rb +75 -0
- data/lib/most/tasks/general/win/ocaml.rb +77 -0
- data/lib/most/tasks/general/win/pascal.rb +73 -0
- data/lib/most/tasks/general/win/perl.rb +61 -0
- data/lib/most/tasks/general/win/php.rb +59 -0
- data/lib/most/tasks/general/win/python.rb +59 -0
- data/lib/most/tasks/general/win/ruby.rb +61 -0
- data/lib/most/tasks/general/win/vb.rb +60 -0
- data/lib/most/tasks/general/win/vc.rb +79 -0
- data/lib/most/tasks/general/win/vs.rb +52 -0
- data/samples/problem/solutions/cpp/main.cpp +9 -0
- data/samples/problem/solutions/cpp/tests.yml +19 -0
- data/samples/problem/solutions/cs/main.cs +17 -0
- data/samples/problem/solutions/cs/tests.yml +19 -0
- data/samples/problem/solutions/erlang/main.erl +2 -0
- data/samples/problem/solutions/erlang/tests.yml +19 -0
- data/samples/problem/solutions/haskell/main.hs +5 -0
- data/samples/problem/solutions/haskell/tests.yml +19 -0
- data/samples/problem/solutions/java/Main.java +14 -0
- data/samples/problem/solutions/java/tests.yml +19 -0
- data/samples/problem/solutions/lisp/main.lisp +1 -0
- data/samples/problem/solutions/lisp/tests.yml +19 -0
- data/samples/problem/solutions/lua/main.lua +4 -0
- data/samples/problem/solutions/lua/tests.yml +19 -0
- data/samples/problem/solutions/ocaml/main.ml +3 -0
- data/samples/problem/solutions/ocaml/tests.yml +19 -0
- data/samples/problem/solutions/pascal/main.pas +5 -0
- data/samples/problem/solutions/pascal/tests.yml +19 -0
- data/samples/problem/solutions/perl/main.pl +2 -0
- data/samples/problem/solutions/perl/tests.yml +19 -0
- data/samples/problem/solutions/php/main.php +1 -0
- data/samples/problem/solutions/php/tests.yml +19 -0
- data/samples/problem/solutions/python/main.py +1 -0
- data/samples/problem/solutions/python/tests.yml +19 -0
- data/samples/problem/solutions/ruby/main.rb +1 -0
- data/samples/problem/solutions/ruby/tests.yml +19 -0
- data/samples/problem/solutions/vb/main.vb +14 -0
- data/samples/problem/solutions/vb/tests.yml +19 -0
- data/samples/time_memory/solutions/cpp/main.cpp +21 -0
- data/samples/time_memory/solutions/cpp/tests.yml +19 -0
- data/tasks/samples.rb +31 -0
- metadata +242 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Most - Modular Open Software Tester.
|
|
2
|
+
# Copyright (C) 2009 Dmitrii Toksaitov
|
|
3
|
+
#
|
|
4
|
+
# This file is part of Most.
|
|
5
|
+
#
|
|
6
|
+
# Most is free software: you can redistribute it and/or modify
|
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
9
|
+
# (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# Most is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
# GNU General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU General Public License
|
|
17
|
+
# along with Most. If not, see <http://www.gnu.org/licenses/>.
|
|
18
|
+
|
|
19
|
+
require 'singleton'
|
|
20
|
+
|
|
21
|
+
module Most
|
|
22
|
+
|
|
23
|
+
class Environment
|
|
24
|
+
include Singleton
|
|
25
|
+
|
|
26
|
+
attr_reader :arguments
|
|
27
|
+
|
|
28
|
+
attr_reader :logger
|
|
29
|
+
attr_reader :options, :modes, :tasks
|
|
30
|
+
|
|
31
|
+
def initialize()
|
|
32
|
+
@arguments = ARGV
|
|
33
|
+
|
|
34
|
+
@logger = SERVICES[:logger]
|
|
35
|
+
|
|
36
|
+
@options = PARAMETERS[:options]
|
|
37
|
+
@modes = PARAMETERS[:modes]
|
|
38
|
+
@tasks = PARAMETERS[:tasks]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def log_error(exception, message)
|
|
42
|
+
@logger.error(message)
|
|
43
|
+
@logger.error(exception.message)
|
|
44
|
+
|
|
45
|
+
unless @modes.nil?
|
|
46
|
+
@logger.error(exception.backtrace) if @modes[:verbose] or
|
|
47
|
+
@modes[:debug]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
GLOBALS[:exit_code] = 1
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def log_warning(text)
|
|
54
|
+
@logger.warn(text)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def log_message(text)
|
|
58
|
+
@logger.info(text)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def show_message(message, is_log_data = false)
|
|
62
|
+
puts "#{message}"
|
|
63
|
+
log_message(message) if is_log_data
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Most - Modular Open Software Tester.
|
|
2
|
+
# Copyright (C) 2009 Dmitrii Toksaitov
|
|
3
|
+
#
|
|
4
|
+
# This file is part of Most.
|
|
5
|
+
#
|
|
6
|
+
# Most is free software: you can redistribute it and/or modify
|
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
9
|
+
# (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# Most is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
# GNU General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU General Public License
|
|
17
|
+
# along with Most. If not, see <http://www.gnu.org/licenses/>.
|
|
18
|
+
|
|
19
|
+
module Most
|
|
20
|
+
|
|
21
|
+
class Executor
|
|
22
|
+
def initialize()
|
|
23
|
+
@environment = SERVICES[:environment]
|
|
24
|
+
@options = @environment.options
|
|
25
|
+
@tasks = @environment.tasks
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def run()
|
|
29
|
+
if @tasks[:show_version]
|
|
30
|
+
output_version()
|
|
31
|
+
elsif @tasks[:show_help]
|
|
32
|
+
output_help()
|
|
33
|
+
else
|
|
34
|
+
begin
|
|
35
|
+
output_result(SERVICES[:core].run())
|
|
36
|
+
rescue Exception => e
|
|
37
|
+
@environment.log_error(e, 'Core failure')
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
def output_result(result)
|
|
44
|
+
file = @options[:output_file]
|
|
45
|
+
|
|
46
|
+
unless file.nil?
|
|
47
|
+
begin
|
|
48
|
+
File.open(File.expand_path(file), 'w+') do |io|
|
|
49
|
+
io.write(result)
|
|
50
|
+
end
|
|
51
|
+
rescue Exception => e
|
|
52
|
+
@environment.log_error(e, 'Failed to output the report')
|
|
53
|
+
puts(result)
|
|
54
|
+
end
|
|
55
|
+
else
|
|
56
|
+
puts(result)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def output_help()
|
|
61
|
+
output_version()
|
|
62
|
+
output_options()
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def output_version()
|
|
66
|
+
@environment.show_message("#{FULL_NAME} version #{VERSION}")
|
|
67
|
+
@environment.show_message("#{COPYRIGHT}")
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def output_options()
|
|
71
|
+
@environment.show_message("Available options: \n\n")
|
|
72
|
+
@environment.show_message("Usage: #{UNIX_NAME} {[option] [parameter]}")
|
|
73
|
+
|
|
74
|
+
SERVICES[:starter].usage.each do |name, options|
|
|
75
|
+
@environment.show_message("\n\t#{options[2]}\n\t\t#{options[0]}, #{options[1]}")
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Most - Modular Open Software Tester.
|
|
2
|
+
# Copyright (C) 2009 Dmitrii Toksaitov
|
|
3
|
+
#
|
|
4
|
+
# This file is part of Most.
|
|
5
|
+
#
|
|
6
|
+
# Most is free software: you can redistribute it and/or modify
|
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
9
|
+
# (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# Most is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
# GNU General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU General Public License
|
|
17
|
+
# along with Most. If not, see <http://www.gnu.org/licenses/>.
|
|
18
|
+
|
|
19
|
+
class Array
|
|
20
|
+
def /(value)
|
|
21
|
+
result = nil
|
|
22
|
+
|
|
23
|
+
if value.is_a?(Symbol)
|
|
24
|
+
result = self + [value]
|
|
25
|
+
elsif value.is_a?(Array)
|
|
26
|
+
result = self + value
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
result
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Most - Modular Open Software Tester.
|
|
2
|
+
# Copyright (C) 2009 Dmitrii Toksaitov
|
|
3
|
+
#
|
|
4
|
+
# This file is part of Most.
|
|
5
|
+
#
|
|
6
|
+
# Most is free software: you can redistribute it and/or modify
|
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
9
|
+
# (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# Most is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
# GNU General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU General Public License
|
|
17
|
+
# along with Most. If not, see <http://www.gnu.org/licenses/>.
|
|
18
|
+
|
|
19
|
+
require 'most/structures/types/options'
|
|
20
|
+
|
|
21
|
+
class Hash
|
|
22
|
+
def to_options()
|
|
23
|
+
Most::Options.new(self)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Most - Modular Open Software Tester.
|
|
2
|
+
# Copyright (C) 2009 Dmitrii Toksaitov
|
|
3
|
+
#
|
|
4
|
+
# This file is part of Most.
|
|
5
|
+
#
|
|
6
|
+
# Most is free software: you can redistribute it and/or modify
|
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
9
|
+
# (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# Most is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
# GNU General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU General Public License
|
|
17
|
+
# along with Most. If not, see <http://www.gnu.org/licenses/>.
|
|
18
|
+
|
|
19
|
+
require 'stringio'
|
|
20
|
+
|
|
21
|
+
module Kernel
|
|
22
|
+
def fake_std()
|
|
23
|
+
result = [StringIO.new(), StringIO.new()]
|
|
24
|
+
|
|
25
|
+
$stdout = result.first()
|
|
26
|
+
$stderr = result.last()
|
|
27
|
+
|
|
28
|
+
yield if block_given?
|
|
29
|
+
|
|
30
|
+
return result
|
|
31
|
+
ensure
|
|
32
|
+
$stdout = STDOUT
|
|
33
|
+
$stderr = STDERR
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
module Most
|
|
2
|
+
module MemoryOut
|
|
3
|
+
class Error < Interrupt; end
|
|
4
|
+
class ExitException < Exception; end
|
|
5
|
+
|
|
6
|
+
THIS_FILE = /\A#{Regexp.quote(__FILE__)}:/o
|
|
7
|
+
CALLER_OFFSET = ((c = caller[0]) && THIS_FILE =~ c) ? 1 : 0
|
|
8
|
+
|
|
9
|
+
def generic_memory_out(bytes, pid = nil, precision = 0.1, klass = nil, checking_proc = method(:memory), &block)
|
|
10
|
+
return yield if bytes.nil? and block_given?
|
|
11
|
+
|
|
12
|
+
current_thread = nil
|
|
13
|
+
checker_thread = nil
|
|
14
|
+
|
|
15
|
+
exception = klass || Class.new(ExitException)
|
|
16
|
+
|
|
17
|
+
begin
|
|
18
|
+
current_thread = Thread.current
|
|
19
|
+
checker_thread = Thread.start do
|
|
20
|
+
loop do
|
|
21
|
+
memory_report = checking_proc.call(pid)
|
|
22
|
+
|
|
23
|
+
GLOBALS[:memory] ||= []
|
|
24
|
+
GLOBALS[:memory] << memory_report
|
|
25
|
+
|
|
26
|
+
if memory_report > bytes
|
|
27
|
+
current_thread.raise(exception)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
sleep(precision)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
yield bytes if block_given?
|
|
35
|
+
|
|
36
|
+
rescue exception => e
|
|
37
|
+
rej = /\A#{Regexp.quote(__FILE__)}:#{__LINE__-4}\z/o
|
|
38
|
+
(bt = e.backtrace).reject! {|m| rej =~ m}
|
|
39
|
+
level = -caller(CALLER_OFFSET).size
|
|
40
|
+
|
|
41
|
+
while THIS_FILE =~ bt[level]
|
|
42
|
+
bt.delete_at(level)
|
|
43
|
+
level += 1
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
raise unless klass.nil?
|
|
47
|
+
|
|
48
|
+
raise(Error, e.message, e.backtrace)
|
|
49
|
+
ensure
|
|
50
|
+
checker_thread.kill() if not checker_thread.nil? and checker_thread.alive?
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def memory_out(bytes, pid = nil, precision = 0.1, klass = nil, &block)
|
|
55
|
+
generic_memory_out(bytes, pid, precision, klass, method(:memory), &block)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def virtual_memory_out(bytes, pid = nil, precision = 0.1, klass = nil, &block)
|
|
59
|
+
generic_memory_out(bytes, pid, precision, klass, method(:virtual_memory), &block)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def total_memory_out(bytes, pid = nil, precision = 0.1, klass = nil, &block)
|
|
63
|
+
generic_memory_out(bytes, pid, precision, klass, method(:total_memory), &block)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def memory(pid = Process.pid)
|
|
67
|
+
result = 0
|
|
68
|
+
|
|
69
|
+
pid ||= GLOBALS[:pid]
|
|
70
|
+
result = SERVICES[:process_table].memory(pid) unless pid.nil?
|
|
71
|
+
|
|
72
|
+
result
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def virtual_memory(pid = Process.pid)
|
|
76
|
+
result = 0
|
|
77
|
+
|
|
78
|
+
pid ||= GLOBALS[:pid]
|
|
79
|
+
result = SERVICES[:process_table].virtual_memory(pid) unless pid.nil?
|
|
80
|
+
|
|
81
|
+
result
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def total_memory(pid = Process.pid)
|
|
85
|
+
memory(pid) + virtual_memory(pid)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
module_function :generic_memory_out
|
|
89
|
+
|
|
90
|
+
module_function :memory_out, :virtual_memory_out, :total_memory_out
|
|
91
|
+
module_function :memory, :virtual_memory, :total_memory
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Most - Modular Open Software Tester.
|
|
2
|
+
# Copyright (C) 2009 Dmitrii Toksaitov
|
|
3
|
+
#
|
|
4
|
+
# This file is part of Most.
|
|
5
|
+
#
|
|
6
|
+
# Most is free software: you can redistribute it and/or modify
|
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
9
|
+
# (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# Most is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
# GNU General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU General Public License
|
|
17
|
+
# along with Most. If not, see <http://www.gnu.org/licenses/>.
|
|
18
|
+
|
|
19
|
+
class Numeric
|
|
20
|
+
def milliseconds()
|
|
21
|
+
self / 100.0
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def seconds()
|
|
25
|
+
self
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def minutes()
|
|
29
|
+
self * 60
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def hours()
|
|
33
|
+
self * 3600
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def bits()
|
|
37
|
+
self * 8
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def bytes()
|
|
41
|
+
self
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def kilobytes()
|
|
45
|
+
self * 1024
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def megabytes()
|
|
49
|
+
self * 1048576
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def gigabytes()
|
|
53
|
+
self * 1073741824
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def petabytes()
|
|
57
|
+
self * 1099511627776
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Most - Modular Open Software Tester.
|
|
2
|
+
# Copyright (C) 2009 Dmitrii Toksaitov
|
|
3
|
+
#
|
|
4
|
+
# This file is part of Most.
|
|
5
|
+
#
|
|
6
|
+
# Most is free software: you can redistribute it and/or modify
|
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
9
|
+
# (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# Most is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
# GNU General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU General Public License
|
|
17
|
+
# along with Most. If not, see <http://www.gnu.org/licenses/>.
|
|
18
|
+
|
|
19
|
+
class Object
|
|
20
|
+
def valid?(item, *args, &block)
|
|
21
|
+
result = item.nil? ? false : true
|
|
22
|
+
|
|
23
|
+
if result
|
|
24
|
+
args.each do |objects|
|
|
25
|
+
unless objects
|
|
26
|
+
result = false; break;
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
yield block if block_given?
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
result
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def first_valid(item, *items)
|
|
37
|
+
result = item
|
|
38
|
+
|
|
39
|
+
if result.nil?
|
|
40
|
+
items.each do |object|
|
|
41
|
+
unless object.nil?
|
|
42
|
+
result = object; break
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
result
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def try(method_name, *args, &block)
|
|
51
|
+
send(method_name, *args, &block) if respond_to?(method_name, true)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
unless method_defined? :intern
|
|
55
|
+
define_method(:intern) do
|
|
56
|
+
result = self
|
|
57
|
+
|
|
58
|
+
unless is_a?(Symbol)
|
|
59
|
+
result.to_s().intern()
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
result
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|