Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 7c58e92

Browse files
committed
Test evaluation
1 parent 593486d commit 7c58e92

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

test/compiler_test.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,17 @@
22

33
return if !defined?(RubyVM::InstructionSequence) || RUBY_VERSION < "3.1"
44
require_relative "test_helper"
5+
require "fiddle"
56

67
module SyntaxTree
78
class CompilerTest < Minitest::Test
9+
ISEQ_LOAD =
10+
Fiddle::Function.new(
11+
Fiddle::Handle::DEFAULT["rb_iseq_load"],
12+
[Fiddle::TYPE_VOIDP] * 3,
13+
Fiddle::TYPE_VOIDP
14+
)
15+
816
CASES = [
917
# Various literals placed on the stack
1018
"true",
@@ -430,6 +438,11 @@ class CompilerTest < Minitest::Test
430438
end
431439
end
432440

441+
def test_evaluation
442+
assert_evaluates 5, "2 + 3"
443+
assert_evaluates 5, "a = 2; b = 3; a + b"
444+
end
445+
433446
private
434447

435448
def serialize_iseq(iseq)
@@ -463,5 +476,17 @@ def assert_compiles(source, **options)
463476
serialize_iseq(program.accept(Visitor::Compiler.new(**options)))
464477
)
465478
end
479+
480+
def assert_evaluates(expected, source, **options)
481+
program = SyntaxTree.parse(source)
482+
compiled = program.accept(Visitor::Compiler.new(**options)).to_a
483+
484+
# Temporary hack until we get these working.
485+
compiled[4][:node_id] = 11
486+
compiled[4][:node_ids] = [1, 0, 3, 2, 6, 7, 9, -1]
487+
488+
iseq = Fiddle.dlunwrap(ISEQ_LOAD.call(Fiddle.dlwrap(compiled), 0, nil))
489+
assert_equal expected, iseq.eval
490+
end
466491
end
467492
end

0 commit comments

Comments
 (0)