rockit 0.7.1 → 0.7.2
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/README +24 -160
- data/TODO +17 -17
- data/VERSION +1 -1
- data/doc/rockit_paper.pdf +0 -0
- data/lib/packrat/grammar.rb +139 -84
- data/rakefile +27 -9
- data/tests/acceptance/packrat/java/atest_java.rb +37 -0
- data/tests/acceptance/packrat/java/java.rb +136 -0
- data/tests/acceptance/packrat/java/t.rb +10 -0
- data/tests/acceptance/packrat/java/todo +10 -0
- data/tests/acceptance/packrat/java/xtc.lang.java/Java.rats +446 -0
- data/tests/acceptance/packrat/java/xtc.lang.java/JavaConstant.rats +111 -0
- data/tests/acceptance/packrat/java/xtc.lang.java/JavaCore.rats +508 -0
- data/tests/acceptance/packrat/java/xtc.lang.java/JavaIdentifier.rats +62 -0
- data/tests/acceptance/packrat/java/xtc.lang.java/JavaSymbol.rats +38 -0
- data/tests/acceptance/packrat/java/xtc.lang.java/JavaTree.rats +40 -0
- data/tests/acceptance/packrat/java/xtc.lang.java/JavaType.rats +61 -0
- data/tests/acceptance/packrat/java/xtc.lang.java/Spacing.rats +36 -0
- data/tests/acceptance/packrat/java/xtc.lang.java/Symbol.rats +77 -0
- data/tests/acceptance/packrat/minibasic/README +13 -0
- data/tests/acceptance/packrat/minibasic/atest_minibasic.rb +151 -13
- data/tests/acceptance/packrat/minibasic/minibasic.rb +94 -76
- data/tests/acceptance/packrat/minibasic/mult3.basic +6 -0
- data/tests/acceptance/packrat/minibasic/sumeven.basic +19 -0
- data/tests/unit/packrat/test_ast.rb +116 -0
- data/tests/unit/packrat/test_interpreting_parser.rb +15 -55
- metadata +22 -59
- data/lib/rockit/prettyprint/box.rb +0 -60
- data/lib/rockit/prettyprint/renderer.rb +0 -41
- data/lib/rockit/prettyprint/text_renderer.rb +0 -47
- data/lib/rockit/tree/base.rb +0 -223
- data/lib/rockit/tree/enter_leave_visitor.rb +0 -12
- data/lib/rockit/tree/graphviz.rb +0 -69
- data/lib/rockit/tree/visitor.rb +0 -12
- data/lib/util/array_alternatives.rb +0 -20
- data/lib/util/enter_leave_visitor.rb +0 -69
- data/lib/util/graphviz_dot.rb +0 -182
- data/lib/util/string_location.rb +0 -42
- data/lib/util/visitor.rb +0 -49
- data/lib/util/visitor_combinators.rb +0 -14
- data/tests/acceptance/rockit/dparser/atest_any_operator.rb +0 -33
- data/tests/acceptance/rockit/dparser/atest_arithmetic_grammar.rb +0 -30
- data/tests/acceptance/rockit/dparser/atest_list_operator.rb +0 -57
- data/tests/acceptance/rockit/dparser/atest_mult_operator.rb +0 -60
- data/tests/acceptance/rockit/dparser/atest_operator_grammar.rb +0 -61
- data/tests/acceptance/rockit/dparser/atest_plus_operator.rb +0 -55
- data/tests/acceptance/rockit/dparser/atest_samples_calculator.rb +0 -14
- data/tests/acceptance/rockit/dparser/atest_samples_minibasic.rb +0 -20
- data/tests/acceptance/rockit/dparser/atest_samples_multifunccalculator.rb +0 -36
- data/tests/acceptance/rockit/dparser/atest_simple_grammar.rb +0 -34
- data/tests/acceptance/rockit/dparser/atest_speculative_code_action.rb +0 -128
- data/tests/acceptance/rockit/dparser/calc_tests_common.rb +0 -103
- data/tests/unit/parse/utest_ebnf_grammar.rb +0 -50
- data/tests/unit/parse/utest_expand_grammar.rb +0 -23
- data/tests/unit/parse/utest_grammar.rb +0 -160
- data/tests/unit/rockit/assembler/llvm/utest_instructions.rb +0 -41
- data/tests/unit/rockit/assembler/llvm/utest_module.rb +0 -19
- data/tests/unit/rockit/prettyprint/utest_box.rb +0 -44
- data/tests/unit/rockit/tree/utest_tree_base.rb +0 -301
- data/tests/unit/rockit/tree/utest_tree_enter_leave_visitor.rb +0 -69
- data/tests/unit/rockit/tree/utest_tree_visitor.rb +0 -63
- data/tests/unit/rockit/utest_grammar.rb +0 -145
- data/tests/unit/rockit/utest_grammar_symbol.rb +0 -11
- data/tests/unit/rockit/utest_maybe_operator.rb +0 -12
- data/tests/unit/rockit/utest_regexp_terminal.rb +0 -45
- data/tests/unit/rockit/utest_repetition_operators.rb +0 -35
- data/tests/unit/rockit/utest_rule.rb +0 -23
- data/tests/unit/rockit/utest_string_terminal.rb +0 -40
- data/tests/unit/util/utest_array_alternatives.rb +0 -23
- data/tests/unit/util/utest_enter_leave_visitor.rb +0 -89
- data/tests/unit/util/utest_string_location.rb +0 -42
- data/tests/unit/util/utest_visitor.rb +0 -92
- data/tests/unit/util/utest_visitor_combinators.rb +0 -64
@@ -1,103 +0,0 @@
|
|
1
|
-
# Tests common to several calculators
|
2
|
-
module CalcTestsCommon
|
3
|
-
def parser
|
4
|
-
@parser ||= @grammar.new_parser
|
5
|
-
end
|
6
|
-
|
7
|
-
def test_01_grammar
|
8
|
-
assert_kind_of(Rockit::DParser::Grammar, @grammar)
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_02_creation_of_parser
|
12
|
-
assert_kind_of(Rockit::DParser::Parser, parser)
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_03_constant
|
16
|
-
ast = parser.parse "1234567890"
|
17
|
-
assert_equal("Constant", ast.name)
|
18
|
-
assert_kind_of(parser.astclass_of_name(:Constant), ast)
|
19
|
-
assert_equal(1, ast.num_children)
|
20
|
-
assert_equal("1234567890", ast[0])
|
21
|
-
assert_equal("1234567890", ast.num)
|
22
|
-
end
|
23
|
-
|
24
|
-
Ops = [["+", :Plus], ["-", :Minus], ["*", :Mul], ["/", :Div]]
|
25
|
-
|
26
|
-
def test_04_operators
|
27
|
-
Ops.each do |op, n|
|
28
|
-
num1, num2 = rand(10).to_s, rand(10).to_s
|
29
|
-
str = num1 + op + num2
|
30
|
-
ast = parser.parse str
|
31
|
-
assert_equal(n.to_s, ast.name)
|
32
|
-
assert_kind_of(parser.astclass_of_name(n), ast)
|
33
|
-
assert_equal(2, ast.num_children)
|
34
|
-
|
35
|
-
assert_kind_of(parser.astclass_of_name(:Constant), ast[0])
|
36
|
-
assert_equal(num1, ast[0].num)
|
37
|
-
assert_kind_of(parser.astclass_of_name(:Constant), ast.left)
|
38
|
-
assert_equal(num1, ast.left.num)
|
39
|
-
|
40
|
-
assert_kind_of(parser.astclass_of_name(:Constant), ast[1])
|
41
|
-
assert_equal(num2, ast[1].num)
|
42
|
-
assert_kind_of(parser.astclass_of_name(:Constant), ast.right)
|
43
|
-
assert_equal(num2, ast.right.num)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_05_paren
|
48
|
-
ast = parser.parse "2 * (4 + 67)"
|
49
|
-
assert_kind_of(parser.astclass_of_name(:Mul), ast)
|
50
|
-
assert_equal(2, ast.num_children)
|
51
|
-
|
52
|
-
assert_kind_of(parser.astclass_of_name(:Constant), ast.left)
|
53
|
-
assert_equal("2", ast.left.num)
|
54
|
-
|
55
|
-
assert_kind_of(parser.astclass_of_name(:Plus), ast.right)
|
56
|
-
|
57
|
-
assert_kind_of(parser.astclass_of_name(:Constant), ast.right.left)
|
58
|
-
assert_equal("4", ast.right.left.num)
|
59
|
-
|
60
|
-
assert_kind_of(parser.astclass_of_name(:Constant), ast.right.right)
|
61
|
-
assert_equal("67", ast.right.right.num)
|
62
|
-
|
63
|
-
assert_equal('Mul[Constant["2"], Plus[Constant["4"], Constant["67"]]]',
|
64
|
-
ast.inspect)
|
65
|
-
end
|
66
|
-
|
67
|
-
def assert_calc(expected, str)
|
68
|
-
assert_equal(expected, @calculator.eval(parser.parse(str)))
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_06_left_associative_operators
|
72
|
-
Ops.each do |op, name|
|
73
|
-
ast = parser.parse "1 #{op} 2 #{op} 3"
|
74
|
-
assert_kind_of(parser.astclass_of_name(name), ast)
|
75
|
-
|
76
|
-
assert_kind_of(parser.astclass_of_name(name), ast.left)
|
77
|
-
assert_equal("1", ast.left.left.num)
|
78
|
-
assert_equal("2", ast.left.right.num)
|
79
|
-
|
80
|
-
assert_kind_of(parser.astclass_of_name(:Constant), ast.right)
|
81
|
-
assert_equal("3", ast.right.num)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_07_mul_higher_precedence_than_plus
|
86
|
-
ast = parser.parse "1 + 2 * 3"
|
87
|
-
assert_kind_of(parser.astclass_of_name(:Plus), ast)
|
88
|
-
|
89
|
-
assert_kind_of(parser.astclass_of_name(:Constant), ast.left)
|
90
|
-
assert_equal("1", ast.left.num)
|
91
|
-
|
92
|
-
assert_kind_of(parser.astclass_of_name(:Mul), ast.right)
|
93
|
-
assert_equal("2", ast.right.left.num)
|
94
|
-
assert_equal("3", ast.right.right.num)
|
95
|
-
end
|
96
|
-
|
97
|
-
def test_08_eval
|
98
|
-
assert_calc(2, "2")
|
99
|
-
assert_calc(2 * (4+67), "2 * (4 + 67)")
|
100
|
-
assert_calc(987 * (456+671), "987*(456+671)")
|
101
|
-
assert_calc((9-5) * (100/10), "(9-5) * (100/10)")
|
102
|
-
end
|
103
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
|
3
|
-
require 'parse/ebnf_grammar'
|
4
|
-
include Parse::Grammar
|
5
|
-
|
6
|
-
class UT_Parse_ebnf_grammar < Test::Unit::TestCase
|
7
|
-
def test_01_Maybe_expansion
|
8
|
-
g = Grammar.new do
|
9
|
-
r :Start, [
|
10
|
-
[maybe(:A), "1"]
|
11
|
-
]
|
12
|
-
r :A, ["a"]
|
13
|
-
end
|
14
|
-
g.expand!
|
15
|
-
assert_equal(3, g.nonterminals.length)
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_02_Plus_expansion
|
19
|
-
g = Grammar.new do
|
20
|
-
r :Start, [
|
21
|
-
[plus(:A), "1"]
|
22
|
-
]
|
23
|
-
r :A, ["a"]
|
24
|
-
end
|
25
|
-
g.expand!
|
26
|
-
assert_equal(4, g.nonterminals.length)
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_03_Mult_expansion
|
30
|
-
g = Grammar.new do
|
31
|
-
r :Start, [
|
32
|
-
[mult(:A), "1"]
|
33
|
-
]
|
34
|
-
r :A, ["a"]
|
35
|
-
end
|
36
|
-
g.expand!
|
37
|
-
assert_equal(3, g.nonterminals.length)
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_04_Group_expansion
|
41
|
-
g = Grammar.new do
|
42
|
-
r :Start, [
|
43
|
-
[group("1", "2"), "3"]
|
44
|
-
]
|
45
|
-
end
|
46
|
-
g.expand!
|
47
|
-
puts g.inspect
|
48
|
-
assert_equal(2, g.nonterminals.length)
|
49
|
-
end
|
50
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
|
3
|
-
require 'parse/expand_grammar'
|
4
|
-
include Parse::Grammar
|
5
|
-
|
6
|
-
class UT_Parse_expand_grammar < Test::Unit::TestCase
|
7
|
-
def test_01_internal_nonterm_num
|
8
|
-
g = Grammar.new
|
9
|
-
assert_equal(1, g.next_free_internal_nonterminal_num)
|
10
|
-
assert_equal(2, g.next_free_internal_nonterminal_num)
|
11
|
-
assert_equal(3, g.next_free_internal_nonterminal_num)
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_02_create_fresh_nonterminal
|
15
|
-
g = Grammar.new
|
16
|
-
nt = g.create_fresh_nonterminal
|
17
|
-
assert_kind_of(NonTerminal, nt)
|
18
|
-
|
19
|
-
# The name should start with the prefix
|
20
|
-
re = Regexp.new("^" + Grammar::InternalNontermNamePrefix)
|
21
|
-
assert_match(re, nt.name.to_s)
|
22
|
-
end
|
23
|
-
end
|
@@ -1,160 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
|
3
|
-
require 'parse/grammar'
|
4
|
-
include Parse::Grammar
|
5
|
-
|
6
|
-
class UT_Parse_Grammar < Test::Unit::TestCase
|
7
|
-
def test_01_Symbol
|
8
|
-
s = Parse::Grammar::GrammarSymbol.new "name"
|
9
|
-
assert_equal("name", s.name)
|
10
|
-
assert_equal("name", s.inspect)
|
11
|
-
assert_equal(s, s.to_grammar_symbol)
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_02_Symbol_name_not_needed
|
15
|
-
s = Parse::Grammar::GrammarSymbol.new
|
16
|
-
assert_equal(nil, s.name)
|
17
|
-
assert_equal(s, s.to_grammar_symbol)
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_03_NonTerminal
|
21
|
-
s = NonTerminal.new :name
|
22
|
-
assert_equal(:name, s.name)
|
23
|
-
assert_equal("name", s.inspect)
|
24
|
-
assert_kind_of(Parse::Grammar::GrammarSymbol, s)
|
25
|
-
assert_equal(s, s.to_grammar_symbol)
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_04_Terminal
|
29
|
-
s = Terminal.new
|
30
|
-
assert_kind_of(Parse::Grammar::GrammarSymbol, s)
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_05_Production
|
34
|
-
p = Production.new(n = NonTerminal.new(:N), [t = Terminal.new(:T)])
|
35
|
-
assert_equal(n, p.symbol)
|
36
|
-
assert_equal(t, p.rhs.first)
|
37
|
-
assert_equal(t, p.right_hand_side.first)
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_06_Production_short_hand
|
41
|
-
p = Prod[n = NonTerminal.new(:N), [t = Terminal.new(:T)]]
|
42
|
-
assert_equal(n, p.symbol)
|
43
|
-
assert_equal(t, p.rhs.first)
|
44
|
-
assert_equal(t, p.right_hand_side.first)
|
45
|
-
|
46
|
-
p2 = Prod[:N, [t]]
|
47
|
-
assert_equal("N", p2.symbol.inspect)
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_07_nonterminal_equality
|
51
|
-
n1 = NonTerminal.new(:N)
|
52
|
-
n2 = NonTerminal.new(:N)
|
53
|
-
assert(n1 == n2)
|
54
|
-
assert(n2 == n1)
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_08_Rule
|
58
|
-
p1 = Prod[n = NonTerminal.new(:N), [Terminal.new(:T1)]]
|
59
|
-
p2 = Prod[:N, [Terminal.new(:T2)]]
|
60
|
-
r = Rule[p1]
|
61
|
-
|
62
|
-
assert(n == r.symbol)
|
63
|
-
assert_equal(1, r.productions.length)
|
64
|
-
|
65
|
-
r.add_production p2
|
66
|
-
assert_equal(n, r.symbol)
|
67
|
-
assert_equal(2, r.productions.length)
|
68
|
-
|
69
|
-
assert_raises(ArgumentError) {r.add_production(Prod[:N2, [Terminal[:T3]]])}
|
70
|
-
end
|
71
|
-
|
72
|
-
def test_09_Grammar
|
73
|
-
g = Grammar.new(:name => "Test Grammar 1", :author => "Robert")
|
74
|
-
assert_kind_of(Grammar, g)
|
75
|
-
assert_equal("Test Grammar 1", g.meta[:name])
|
76
|
-
assert_equal("Robert", g.meta[:author])
|
77
|
-
assert_equal(0, g.rules.length)
|
78
|
-
assert_equal(0, g.nonterminals.length)
|
79
|
-
assert_equal(0, g.terminals.length)
|
80
|
-
assert_equal(0, g.symbols.length)
|
81
|
-
|
82
|
-
g.add_rule(Rule[Prod[:N, [Terminal[:T1]]]])
|
83
|
-
assert_equal(1, g.rules.length)
|
84
|
-
assert_equal(1, g.nonterminals.length)
|
85
|
-
assert_equal(1, g.terminals.length)
|
86
|
-
assert_equal(2, g.symbols.length)
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_10_symbol_predicates
|
90
|
-
nt = NonTerminal[:N]
|
91
|
-
assert_equal(true, nt.nonterminal?)
|
92
|
-
assert_equal(false, nt.terminal?)
|
93
|
-
assert_equal(false, nt.action?)
|
94
|
-
|
95
|
-
t = Terminal[:T]
|
96
|
-
assert_equal(false, t.nonterminal?)
|
97
|
-
assert_equal(true, t.terminal?)
|
98
|
-
assert_equal(false, t.action?)
|
99
|
-
|
100
|
-
a = Action[:A]
|
101
|
-
assert_equal(false, a.nonterminal?)
|
102
|
-
assert_equal(false, a.terminal?)
|
103
|
-
assert_equal(true, a.action?)
|
104
|
-
end
|
105
|
-
|
106
|
-
class TestGrammar < Grammar
|
107
|
-
r :S, [[:B]]
|
108
|
-
r :B, [
|
109
|
-
[Terminal.new(:T1)],
|
110
|
-
[Terminal.new(:T2), Terminal.new(:T3)],
|
111
|
-
]
|
112
|
-
t :CT1, ["A"]
|
113
|
-
end
|
114
|
-
|
115
|
-
def test_11_embedded_grammar_def
|
116
|
-
t = TestGrammar.new
|
117
|
-
|
118
|
-
assert_equal(2, t.rules.length)
|
119
|
-
|
120
|
-
assert_equal(:S, t.rules.first.symbol.name)
|
121
|
-
assert_equal(1, t.rules.first.productions.length)
|
122
|
-
|
123
|
-
assert_equal(:B, t.rules.last.symbol.name)
|
124
|
-
assert_equal(2, t.rules.last.productions.length)
|
125
|
-
assert_equal(:T1, t.rules.last.productions.first.rhs.first.name)
|
126
|
-
assert_equal(:T2, t.rules.last.productions.last.rhs.first.name)
|
127
|
-
assert_equal(:T3, t.rules.last.productions.last.rhs.last.name)
|
128
|
-
|
129
|
-
assert_equal(1, t.complex_terminals.length)
|
130
|
-
|
131
|
-
assert_equal(:CT1, t.complex_terminals.first.name)
|
132
|
-
end
|
133
|
-
|
134
|
-
TestDeepClone = Struct.new(:a)
|
135
|
-
|
136
|
-
def test_12_deep_clone
|
137
|
-
a = [1,2,3]
|
138
|
-
t1 = TestDeepClone.new(a)
|
139
|
-
t1a = t1.clone
|
140
|
-
t1b = t1.deep_clone
|
141
|
-
assert_equal(t1.a.object_id, t1a.a.object_id)
|
142
|
-
assert_not_equal(t1.a.object_id, t1b.a.object_id)
|
143
|
-
end
|
144
|
-
|
145
|
-
def test_13_define_grammar_in_a_block
|
146
|
-
g = Grammar.new do
|
147
|
-
r :S, [["a", :B]]
|
148
|
-
r :B, [["b"]]
|
149
|
-
end
|
150
|
-
assert_equal(2, g.nonterminals.length)
|
151
|
-
end
|
152
|
-
|
153
|
-
def test_14_extending_a_grammar_with_a_block
|
154
|
-
g = TestGrammar.new do
|
155
|
-
r :A, [["a"]]
|
156
|
-
end
|
157
|
-
# Two nonterminals in the original grammar and one new here => 3
|
158
|
-
assert_equal(3, g.nonterminals.length)
|
159
|
-
end
|
160
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
|
3
|
-
require 'rockit/assembler/llvm/instructions'
|
4
|
-
include Rockit::Assembler::LLVM
|
5
|
-
|
6
|
-
class UTestLLVMInstructions < Test::Unit::TestCase
|
7
|
-
def test_01_NamedValue_valid
|
8
|
-
nv1 = NamedValue.new("foo")
|
9
|
-
assert_equal("%foo", nv1.to_llvm)
|
10
|
-
|
11
|
-
nv2 = NamedValue.new("DivByZero")
|
12
|
-
assert_equal("%DivByZero", nv2.to_llvm)
|
13
|
-
|
14
|
-
nv3 = NamedValue.new("a.really.long.identifier")
|
15
|
-
assert_equal("%a.really.long.identifier", nv3.to_llvm)
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_02_NamedValue_invalid
|
19
|
-
assert_raises(ArgumentError) {NamedValue.new("12")}
|
20
|
-
assert_raises(ArgumentError) {NamedValue.new("%")}
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_03_UnnamedValue_valid
|
24
|
-
u1 = UnnamedValue.new(0)
|
25
|
-
assert_equal("%0", u1.to_llvm)
|
26
|
-
|
27
|
-
u2 = UnnamedValue.new(12)
|
28
|
-
assert_equal("%12", u2.to_llvm)
|
29
|
-
|
30
|
-
u3 = UnnamedValue.new(2)
|
31
|
-
assert_equal("%2", u3.to_llvm)
|
32
|
-
|
33
|
-
u4 = UnnamedValue.new(44)
|
34
|
-
assert_equal("%44", u4.to_llvm)
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_04_UnnamedValue_invalid
|
38
|
-
assert_raises(ArgumentError) {UnnamedValue.new(-1)}
|
39
|
-
assert_raises(ArgumentError) {UnnamedValue.new(-18743)}
|
40
|
-
end
|
41
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
|
3
|
-
require 'rockit/assembler/llvm/module'
|
4
|
-
include Rockit::Assembler::LLVM
|
5
|
-
|
6
|
-
class UTestLLVMInstructions < Test::Unit::TestCase
|
7
|
-
# Hello world example module
|
8
|
-
class TestModule1 < LLVM::Module
|
9
|
-
LC0 = internal constant '[13 x sbyte]' c("hello world\0A")
|
10
|
-
|
11
|
-
declare int "puts", [sbytep]
|
12
|
-
|
13
|
-
defmethod("main", int, []) do
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def te
|
19
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
|
3
|
-
require 'rockit/prettyprint/box'
|
4
|
-
include Rockit::PrettyPrint
|
5
|
-
|
6
|
-
class UTestBox < Test::Unit::TestCase
|
7
|
-
def setup
|
8
|
-
@h = Box::H.new(1, "a")
|
9
|
-
@h1 = Box::H.new(1, "a", "b")
|
10
|
-
@h2 = Box::H.new(2, "a", "b")
|
11
|
-
@h3 = Box::H.new(3, "a", "b", "c")
|
12
|
-
@v = Box::V.new("a", "2 2", "c")
|
13
|
-
@e = Box::Epsilon.new("x", " ", ":=")
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_01_creation
|
17
|
-
assert_kind_of(Box::H, @h)
|
18
|
-
assert_equal(1, @h.num_spaces)
|
19
|
-
assert_equal(["a"], @h.elements)
|
20
|
-
|
21
|
-
assert_kind_of(Box::H, @h3)
|
22
|
-
assert_equal(3, @h3.num_spaces)
|
23
|
-
assert_equal(["a", "b", "c"], @h3.elements)
|
24
|
-
|
25
|
-
assert_kind_of(Box::V, @v)
|
26
|
-
assert_equal(["a", "2 2", "c"], @v.elements)
|
27
|
-
|
28
|
-
assert_kind_of(Box::Epsilon, @e)
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_02_render
|
32
|
-
assert_equal("a", @h.render)
|
33
|
-
assert_equal("a b", @h1.render)
|
34
|
-
assert_equal("a b", @h2.render)
|
35
|
-
assert_equal("a b c", @h3.render)
|
36
|
-
assert_equal("a\n2 2\nc", @v.render)
|
37
|
-
assert_equal("x :=", @e.render)
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_03_prepend
|
41
|
-
p = Box::Prepend["#", "A comment"]
|
42
|
-
assert_equal("# A comment", p.render)
|
43
|
-
end
|
44
|
-
end
|