gettc 1.10 → 2.0
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.
- checksums.yaml +4 -4
- data/bin/gettc +60 -69
- data/dist/config.yml +1 -1
- data/dist/include/cpp/engine.rb +78 -86
- data/dist/include/cpp/topcoder +236 -236
- data/dist/include/go/engine.rb +53 -61
- data/dist/include/haskell/engine.rb +112 -122
- data/dist/include/java/engine.rb +187 -184
- data/dist/include/javascript/engine.rb +26 -30
- data/dist/include/javascript/topcoder.js +3 -3
- data/dist/include/javascript/topcoder/errors.js +5 -5
- data/dist/include/javascript/topcoder/reader.js +188 -165
- data/dist/include/javascript/topcoder/writer.js +37 -33
- data/dist/include/python/engine.rb +43 -52
- data/dist/include/python/topcoder/__init__.pyc +0 -0
- data/dist/include/python/topcoder/__pycache__/__init__.cpython-34.pyc +0 -0
- data/dist/include/python/topcoder/__pycache__/errors.cpython-34.pyc +0 -0
- data/dist/include/python/topcoder/__pycache__/reader.cpython-34.pyc +0 -0
- data/dist/include/python/topcoder/__pycache__/writer.cpython-34.pyc +0 -0
- data/dist/include/python/topcoder/errors.pyc +0 -0
- data/dist/include/python/topcoder/reader.pyc +0 -0
- data/dist/include/python/topcoder/writer.pyc +0 -0
- data/dist/include/ruby/engine.rb +47 -52
- data/dist/include/ruby/topcoder/reader.rb +205 -193
- data/dist/include/ruby/topcoder/writer.rb +39 -37
- data/dist/template/bin/runner.rb +146 -151
- data/dist/template/bin/runner.sh +96 -96
- data/dist/template/prob/{name}.html +1 -1
- data/dist/template/solve/cpp/{name}.cpp +3 -4
- data/dist/template/solve/cpp/{name}Solver.cpp +14 -14
- data/dist/template/solve/go/{name}/{name}.go +3 -3
- data/dist/template/solve/go/{name}Solver.go +2 -2
- data/dist/template/solve/haskell/{name}.hs +6 -6
- data/dist/template/solve/haskell/{name}Solver.hs +10 -10
- data/dist/template/solve/java/{name}.java +4 -4
- data/dist/template/solve/java/{name}Solver.java +4 -4
- data/dist/template/solve/javascript/{name}.js +4 -6
- data/dist/template/solve/javascript/{name}Solver.js +11 -9
- data/dist/template/solve/python/{name}.py +1 -1
- data/dist/template/solve/python/{name}Solver.py +2 -2
- data/dist/template/solve/ruby/{name}.rb +4 -4
- data/dist/template/solve/ruby/{name}Solver.rb +14 -17
- data/dist/template/util/check/check.cpp +19 -19
- data/{core/lib → lib}/gettc.rb +0 -0
- data/lib/gettc/account.rb +14 -0
- data/lib/gettc/download.rb +211 -0
- data/lib/gettc/generate.rb +156 -0
- data/lib/gettc/parse.rb +237 -0
- data/lib/gettc/print.rb +54 -0
- data/lib/gettc/problem.rb +39 -0
- data/lib/gettc/signature.rb +63 -0
- data/lib/gettc/types.rb +93 -0
- data/lib/version.rb +3 -0
- data/test/gettc/download_test.rb +61 -0
- data/test/gettc/generate_test.rb +70 -0
- data/test/gettc/parse_test.rb +78 -0
- data/test/gettc/signature_test.rb +71 -0
- data/test/gettc/types_test.rb +31 -0
- metadata +28 -23
- data/core/lib/gettc/download.rb +0 -130
- data/core/lib/gettc/generate.rb +0 -145
- data/core/lib/gettc/parse.rb +0 -233
- data/core/lib/gettc/print.rb +0 -56
- data/core/lib/gettc/problem.rb +0 -33
- data/core/lib/gettc/signature.rb +0 -55
- data/core/lib/gettc/types.rb +0 -83
- data/core/lib/version.rb +0 -3
- data/core/test/gettc/download_test.rb +0 -29
- data/core/test/gettc/generate_test.rb +0 -31
- data/core/test/gettc/parse_test.rb +0 -104
- data/core/test/gettc/signature_test.rb +0 -54
- data/core/test/gettc/types_test.rb +0 -28
data/core/lib/gettc/print.rb
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
require "gettc/problem"
|
2
|
-
require "rdiscount"
|
3
|
-
|
4
|
-
module Gettc
|
5
|
-
class Problem
|
6
|
-
def to_md
|
7
|
-
out = "# [#{@name}](#{@url})\n"
|
8
|
-
out << "*#{@source}*\n\n"
|
9
|
-
|
10
|
-
out << "## Statement\n"
|
11
|
-
out << @statement << "\n\n"
|
12
|
-
|
13
|
-
unless @definitions.empty? then
|
14
|
-
out << "## Definitions\n"
|
15
|
-
@definitions.each do |k, v| out << "- *#{k}*: `#{v}`\n" end
|
16
|
-
out << "\n"
|
17
|
-
end
|
18
|
-
|
19
|
-
unless @notes.empty? then
|
20
|
-
out << "## Notes\n"
|
21
|
-
@notes.each do |note| out << "- #{note}\n" end
|
22
|
-
out << "\n"
|
23
|
-
end
|
24
|
-
|
25
|
-
unless @constraints.empty? then
|
26
|
-
out << "## Constraints\n"
|
27
|
-
@constraints.each do |constraint|
|
28
|
-
out << "- #{constraint}\n"
|
29
|
-
end
|
30
|
-
out << "\n"
|
31
|
-
end
|
32
|
-
|
33
|
-
unless @examples.empty? then
|
34
|
-
out << "## Examples\n"
|
35
|
-
@examples.each_index do |i|
|
36
|
-
example = @examples[i]
|
37
|
-
out << "### Example #{i + 1}\n"
|
38
|
-
out << "#### Input\n<c>"
|
39
|
-
out << example.input.gsub("\n", "<br />")
|
40
|
-
out << "</c>\n"
|
41
|
-
out << "#### Output\n<c>"
|
42
|
-
out << example.output.gsub("\n", "<br />")
|
43
|
-
out << "</c>\n"
|
44
|
-
unless example.reason.empty? then
|
45
|
-
out << "#### Reason\n#{example.reason}\n\n"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
return out
|
50
|
-
end
|
51
|
-
def to_html
|
52
|
-
markdown = RDiscount.new to_md
|
53
|
-
return markdown.to_html
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
data/core/lib/gettc/problem.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
module Gettc
|
2
|
-
class Case
|
3
|
-
attr_accessor :input, :output, :reason
|
4
|
-
def initialize
|
5
|
-
@input = ""
|
6
|
-
@output = ""
|
7
|
-
@reason = ""
|
8
|
-
end
|
9
|
-
end
|
10
|
-
class Image
|
11
|
-
attr_accessor :name, :content
|
12
|
-
def initialize
|
13
|
-
@name = ""
|
14
|
-
@content = ""
|
15
|
-
end
|
16
|
-
end
|
17
|
-
class Problem
|
18
|
-
attr_accessor :name, :url, :source, :statement, :definitions, :notes,
|
19
|
-
:constraints, :examples, :systests, :images
|
20
|
-
def initialize
|
21
|
-
@name = ""
|
22
|
-
@url = ""
|
23
|
-
@source = ""
|
24
|
-
@statement = ""
|
25
|
-
@definitions = { }
|
26
|
-
@notes = []
|
27
|
-
@constraints = []
|
28
|
-
@examples = []
|
29
|
-
@systests = []
|
30
|
-
@images = []
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
data/core/lib/gettc/signature.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
require "gettc/types"
|
2
|
-
|
3
|
-
module Gettc
|
4
|
-
class SignatureError < StandardError
|
5
|
-
end
|
6
|
-
class CannotParseSignature < SignatureError
|
7
|
-
attr_accessor :source
|
8
|
-
def initialize source, msg = "Cannot parse signature"
|
9
|
-
@source = source
|
10
|
-
super "#{msg} (#{source}"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
class InvalidVariableName < SignatureError
|
14
|
-
attr_accessor :name
|
15
|
-
def initialize name, msg = "Invalid variable name"
|
16
|
-
@name = name
|
17
|
-
super "#{msg} (#{name})"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
class Signature
|
21
|
-
attr_accessor :type, :name
|
22
|
-
def initialize type, name
|
23
|
-
@type = type
|
24
|
-
@name = name
|
25
|
-
end
|
26
|
-
end
|
27
|
-
def parse_signature str
|
28
|
-
str.strip!
|
29
|
-
parts = str.split
|
30
|
-
raise CannotParseSignature.new str if parts.size != 2
|
31
|
-
type = parse_type parts[0]
|
32
|
-
name = parts[1]
|
33
|
-
if name =~ /^[a-zA-Z_]\w*$/
|
34
|
-
return Signature.new type, name
|
35
|
-
else
|
36
|
-
raise InvalidVariableName.new name
|
37
|
-
end
|
38
|
-
end
|
39
|
-
def parse_method_signature str
|
40
|
-
str.strip!
|
41
|
-
sigs = []
|
42
|
-
parts = str.split "("
|
43
|
-
raise CannotParseSignature.new str if parts.size != 2
|
44
|
-
sigs << parse_signature(parts[0])
|
45
|
-
|
46
|
-
str = parts[1]
|
47
|
-
raise CannotParseSignature.new str if str[-1] != ")"
|
48
|
-
str.chop!
|
49
|
-
|
50
|
-
parts = str.split ","
|
51
|
-
parts.each do |sig| sigs << parse_signature(sig) end
|
52
|
-
|
53
|
-
return sigs
|
54
|
-
end
|
55
|
-
end
|
data/core/lib/gettc/types.rb
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
module Gettc
|
2
|
-
TypeError = Class.new StandardError
|
3
|
-
class UnsupportedType < TypeError
|
4
|
-
attr_accessor :type
|
5
|
-
def initialize type = nil, msg = "Not a valid TopCoder type"
|
6
|
-
@type = type
|
7
|
-
super "#{msg} (#{type})"
|
8
|
-
end
|
9
|
-
end
|
10
|
-
class Type
|
11
|
-
def initialize is_object
|
12
|
-
@is_object = is_object
|
13
|
-
end
|
14
|
-
def obj?
|
15
|
-
return @is_object
|
16
|
-
end
|
17
|
-
def to_s
|
18
|
-
if is_a? TArray then
|
19
|
-
return subtype.to_s + "[]"
|
20
|
-
end
|
21
|
-
|
22
|
-
case self
|
23
|
-
when TInt
|
24
|
-
return "int"
|
25
|
-
when TLong
|
26
|
-
return "long"
|
27
|
-
when TFloat
|
28
|
-
return "float"
|
29
|
-
when TDouble
|
30
|
-
return "double"
|
31
|
-
when TChar
|
32
|
-
return "char"
|
33
|
-
when TString
|
34
|
-
return "String"
|
35
|
-
when TBoolean
|
36
|
-
return "boolean"
|
37
|
-
end
|
38
|
-
|
39
|
-
return "unknown"
|
40
|
-
end
|
41
|
-
end
|
42
|
-
TBoolean = Type.new false
|
43
|
-
TInt = Type.new false
|
44
|
-
TLong = Type.new false
|
45
|
-
TFloat = Type.new false
|
46
|
-
TDouble = Type.new false
|
47
|
-
TChar = Type.new false
|
48
|
-
TString = Type.new true
|
49
|
-
class TArray < Type
|
50
|
-
attr_accessor :subtype
|
51
|
-
def initialize subtype
|
52
|
-
raise UnsupportedType.new subtype unless subtype.is_a? Type
|
53
|
-
@subtype = subtype
|
54
|
-
end
|
55
|
-
def == ary
|
56
|
-
return false unless ary.is_a? TArray
|
57
|
-
return @subtype == ary.subtype
|
58
|
-
end
|
59
|
-
def obj?
|
60
|
-
return true
|
61
|
-
end
|
62
|
-
end
|
63
|
-
def parse_type str
|
64
|
-
return TArray.new parse_type str[0 .. -3] if str[-2 .. -1] == "[]"
|
65
|
-
case str
|
66
|
-
when "boolean"
|
67
|
-
return TBoolean
|
68
|
-
when "int"
|
69
|
-
return TInt
|
70
|
-
when "long"
|
71
|
-
return TLong
|
72
|
-
when "float"
|
73
|
-
return TFloat
|
74
|
-
when "double"
|
75
|
-
return TDouble
|
76
|
-
when "char"
|
77
|
-
return TChar
|
78
|
-
when "String"
|
79
|
-
return TString
|
80
|
-
end
|
81
|
-
raise UnsupportedType.new str
|
82
|
-
end
|
83
|
-
end
|
data/core/lib/version.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require "test/unit"
|
2
|
-
require "gettc/download"
|
3
|
-
include Gettc
|
4
|
-
|
5
|
-
class DownloadTest < Test::Unit::TestCase
|
6
|
-
def setup
|
7
|
-
@account = Account.new "gettc", "algorithm"
|
8
|
-
end
|
9
|
-
def test_wrong_account
|
10
|
-
assert_raises LoginFailed do
|
11
|
-
Downloader.new Account.new "username", "password"
|
12
|
-
end
|
13
|
-
end
|
14
|
-
def test_wrong_id
|
15
|
-
assert_raises IDNotAvailable do
|
16
|
-
(Downloader.new @account).download_problem 1000000
|
17
|
-
end
|
18
|
-
end
|
19
|
-
def test_download_ok
|
20
|
-
ids = [10297, 10324, 10329, 10330, 10505, 10685, 10686, 10690, 11264,
|
21
|
-
11266, 11303, 11315, 11322, 11350, 11357, 11419, 8763, 8819, 9995]
|
22
|
-
downloader = Downloader.new @account
|
23
|
-
3.times do
|
24
|
-
id = ids[rand ids.size]
|
25
|
-
html = downloader.download_problem id
|
26
|
-
assert_match "<h3>Problem Statement</h3>", html
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require "test/unit"
|
2
|
-
require "fileutils"
|
3
|
-
require "tmpdir"
|
4
|
-
|
5
|
-
require "gettc/generate"
|
6
|
-
include Gettc
|
7
|
-
|
8
|
-
class GenerateTest < Test::Unit::TestCase
|
9
|
-
def setup
|
10
|
-
@source_d = File.join File.dirname(__FILE__), "../../dist"
|
11
|
-
@target_d = File.join Dir.tmpdir, "gettc"
|
12
|
-
FileUtils.mkdir @target_d unless File.directory? @target_d
|
13
|
-
@generator = Generator.new @source_d, @target_d
|
14
|
-
end
|
15
|
-
def test_initialize
|
16
|
-
assert_raise SourceDirNotExist do
|
17
|
-
Generator.new "this_directory_must_not_exist", @target_d
|
18
|
-
end
|
19
|
-
assert_raise TargetDirNotExist do
|
20
|
-
Generator.new @source_d, "this_directory_must_not_exist"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
def test_prob_dir_exists
|
24
|
-
prob = Problem.new
|
25
|
-
prob.name = "JustATest"
|
26
|
-
prob_d = File.join @target_d, prob.name
|
27
|
-
FileUtils.mkdir prob_d unless File.exists? prob_d
|
28
|
-
assert_raise ProblemDirExists do @generator.generate prob end
|
29
|
-
FileUtils.rmdir prob_d
|
30
|
-
end
|
31
|
-
end
|
@@ -1,104 +0,0 @@
|
|
1
|
-
require "test/unit"
|
2
|
-
require "gettc/parse"
|
3
|
-
include Gettc
|
4
|
-
|
5
|
-
class ParseTest < Test::Unit::TestCase
|
6
|
-
def setup
|
7
|
-
downloader = Downloader.new Account.new "gettc", "algorithm"
|
8
|
-
@parser = Parser.new downloader
|
9
|
-
@data_d = File.join File.dirname(__FILE__), "../../temp/download_problem_statement"
|
10
|
-
end
|
11
|
-
def get_problem_raw prob
|
12
|
-
return File.read File.join @data_d, prob + ".htm"
|
13
|
-
end
|
14
|
-
def test_indexes
|
15
|
-
assert_equal [0, 3], @parser.send(:indexes, "abcde", "bc")
|
16
|
-
assert_equal nil, @parser.send(:indexes, "abcde", "f")
|
17
|
-
end
|
18
|
-
def test_filter
|
19
|
-
assert_equal "Lorem Ipsum", @parser.send(:filter, "<xml> Lorem Ipsum </xml> ")
|
20
|
-
assert_equal "2^(3)", @parser.send(:filter, "2<sup>3</sup>")
|
21
|
-
assert_equal "*hi*", @parser.send(:filter, " <b>hi</b>")
|
22
|
-
html = <<-END
|
23
|
-
<img src=
|
24
|
-
"http://www.topcoder.com/contest/problem/CirclesCountry/case1.gif">
|
25
|
-
END
|
26
|
-
assert_equal "", @parser.send(:filter, html)
|
27
|
-
end
|
28
|
-
def test_PageNumbers
|
29
|
-
html = get_problem_raw "PageNumbers"
|
30
|
-
prob = @parser.parse html
|
31
|
-
assert_equal "PageNumbers", prob.name
|
32
|
-
assert_equal 5, prob.definitions.size
|
33
|
-
assert_equal 1, prob.notes.size
|
34
|
-
assert_equal 1, prob.constraints.size
|
35
|
-
assert_equal 5, prob.examples.size
|
36
|
-
assert_equal 118, prob.systests.size
|
37
|
-
assert_equal 0, prob.images.size
|
38
|
-
end
|
39
|
-
def test_CirclesCountry
|
40
|
-
html = get_problem_raw "CirclesCountry"
|
41
|
-
prob = @parser.parse html
|
42
|
-
assert_equal "CirclesCountry", prob.name
|
43
|
-
assert_equal 5, prob.definitions.size
|
44
|
-
assert_equal 0, prob.notes.size
|
45
|
-
assert_equal 7, prob.constraints.size
|
46
|
-
assert_equal 5, prob.examples.size
|
47
|
-
assert_equal 228, prob.systests.size
|
48
|
-
assert_equal 4, prob.images.size
|
49
|
-
end
|
50
|
-
def test_TheTournamentDivOne
|
51
|
-
html = get_problem_raw "TheTournamentDivOne"
|
52
|
-
prob = @parser.parse html
|
53
|
-
assert_equal "TheTournamentDivOne", prob.name
|
54
|
-
assert_equal 5, prob.definitions.size
|
55
|
-
assert_equal 0, prob.notes.size
|
56
|
-
assert_equal 4, prob.constraints.size
|
57
|
-
assert_equal 4, prob.examples.size
|
58
|
-
assert_equal 0, prob.systests.size
|
59
|
-
assert_equal 0, prob.images.size
|
60
|
-
end
|
61
|
-
def test_FunnyGames
|
62
|
-
html = get_problem_raw "FunnyGames"
|
63
|
-
prob = @parser.parse html
|
64
|
-
assert_equal "FunnyGames", prob.name
|
65
|
-
assert_equal 5, prob.definitions.size
|
66
|
-
assert_equal 0, prob.notes.size
|
67
|
-
assert_equal 6, prob.constraints.size
|
68
|
-
assert_equal 5, prob.examples.size
|
69
|
-
assert_equal 0, prob.systests.size
|
70
|
-
assert_equal 0, prob.images.size
|
71
|
-
end
|
72
|
-
def test_BuildingRoads
|
73
|
-
html = get_problem_raw "BuildingRoads"
|
74
|
-
prob = @parser.parse html
|
75
|
-
assert_equal "BuildingRoads", prob.name
|
76
|
-
assert_equal 5, prob.definitions.size
|
77
|
-
assert_equal 2, prob.notes.size
|
78
|
-
assert_equal 10, prob.constraints.size
|
79
|
-
assert_equal 5, prob.examples.size
|
80
|
-
assert_equal 0, prob.systests.size
|
81
|
-
assert_equal 2, prob.images.size
|
82
|
-
end
|
83
|
-
def test_Acronyms
|
84
|
-
html = get_problem_raw "Acronyms"
|
85
|
-
prob = @parser.parse html
|
86
|
-
assert_equal "Acronyms", prob.name
|
87
|
-
assert_equal 5, prob.definitions.size
|
88
|
-
assert_equal 1, prob.notes.size
|
89
|
-
assert_equal 8, prob.constraints.size
|
90
|
-
assert_equal 8, prob.examples.size
|
91
|
-
assert_equal 39, prob.systests.size
|
92
|
-
assert_equal 0, prob.images.size
|
93
|
-
end
|
94
|
-
def test_BackyardTrees
|
95
|
-
html = get_problem_raw "BackyardTrees"
|
96
|
-
prob = @parser.parse html
|
97
|
-
assert_equal "BackyardTrees", prob.name
|
98
|
-
assert_equal 5, prob.definitions.size
|
99
|
-
assert_equal 0, prob.notes.size
|
100
|
-
assert_equal 4, prob.constraints.size
|
101
|
-
assert_equal 6, prob.examples.size
|
102
|
-
assert_equal 2, prob.images.size
|
103
|
-
end
|
104
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
require "test/unit"
|
2
|
-
require "gettc/signature"
|
3
|
-
include Gettc
|
4
|
-
|
5
|
-
class SignatureTest < Test::Unit::TestCase
|
6
|
-
def test_parse_signature
|
7
|
-
assert_raise CannotParseSignature do
|
8
|
-
parse_signature "invalid_signature"
|
9
|
-
end
|
10
|
-
assert_raise UnsupportedType do
|
11
|
-
parse_signature "strange_type name"
|
12
|
-
end
|
13
|
-
assert_raise InvalidVariableName do
|
14
|
-
parse_signature "int not&ok&name"
|
15
|
-
end
|
16
|
-
assert_raise InvalidVariableName do
|
17
|
-
parse_signature "int 0zero"
|
18
|
-
end
|
19
|
-
sig = parse_signature "String[] a_valid_nam3"
|
20
|
-
assert_equal TArray.new(TString), sig.type
|
21
|
-
assert_equal "a_valid_nam3", sig.name
|
22
|
-
end
|
23
|
-
def test_parse_method_signature
|
24
|
-
assert_raise CannotParseSignature do
|
25
|
-
parse_method_signature "there are no brackets"
|
26
|
-
end
|
27
|
-
assert_raise CannotParseSignature do
|
28
|
-
parse_method_signature "int main(int main())"
|
29
|
-
end
|
30
|
-
assert_raise CannotParseSignature do
|
31
|
-
parse_method_signature "int main(oops forget to close bracket"
|
32
|
-
end
|
33
|
-
method = " int leastBorders(String[] X , int[] Y, double[] R,"
|
34
|
-
method += " char my_x1, long y1 , float x2, int[][] y2) "
|
35
|
-
sigs = parse_method_signature method
|
36
|
-
assert_equal 8, sigs.size
|
37
|
-
assert_equal TInt, sigs[0].type
|
38
|
-
assert_equal "leastBorders", sigs[0].name
|
39
|
-
assert_equal TArray.new(TString), sigs[1].type
|
40
|
-
assert_equal "X", sigs[1].name
|
41
|
-
assert_equal TArray.new(TInt), sigs[2].type
|
42
|
-
assert_equal "Y", sigs[2].name
|
43
|
-
assert_equal TArray.new(TDouble), sigs[3].type
|
44
|
-
assert_equal "R", sigs[3].name
|
45
|
-
assert_equal TChar, sigs[4].type
|
46
|
-
assert_equal "my_x1", sigs[4].name
|
47
|
-
assert_equal TLong, sigs[5].type
|
48
|
-
assert_equal "y1", sigs[5].name
|
49
|
-
assert_equal TFloat, sigs[6].type
|
50
|
-
assert_equal "x2", sigs[6].name
|
51
|
-
assert_equal TArray.new(TArray.new(TInt)), sigs[7].type
|
52
|
-
assert_equal "y2", sigs[7].name
|
53
|
-
end
|
54
|
-
end
|