Skip to content

Commit c8f31eb

Browse files
committed
Fix rational parsing
1 parent 7984e4d commit c8f31eb

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

lib/yarp.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ def value
343343

344344
class RationalNode < Node
345345
def value
346-
Rational(numeric.value)
346+
Rational(slice.chomp("r"))
347347
end
348348
end
349349

test/ruby_api_test.rb

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ def test_ruby_api
88
source = File.read(filepath, binmode: true, external_encoding: Encoding::UTF_8)
99

1010
assert_equal YARP.lex(source, filepath).value, YARP.lex_file(filepath).value
11-
1211
assert_equal YARP.dump(source, filepath), YARP.dump_file(filepath)
1312

1413
serialized = YARP.dump(source, filepath)
@@ -21,13 +20,20 @@ def test_ruby_api
2120
end
2221

2322
def test_literal_value_method
24-
assert_equal 123, YARP.parse("123").value.statements.body.first.value
25-
assert_equal 3.14, YARP.parse("3.14").value.statements.body.first.value
26-
assert_equal 42i, YARP.parse("42i").value.statements.body.first.value
27-
assert_equal 3.14i, YARP.parse("3.14i").value.statements.body.first.value
28-
assert_equal 42r, YARP.parse("42r").value.statements.body.first.value
29-
assert_equal 0.5r, YARP.parse("0.5r").value.statements.body.first.value
30-
assert_equal 42ri, YARP.parse("42ri").value.statements.body.first.value
31-
assert_equal 0.5ri, YARP.parse("0.5ri").value.statements.body.first.value
23+
assert_equal 123, parse_expression("123").value
24+
assert_equal 3.14, parse_expression("3.14").value
25+
assert_equal 42i, parse_expression("42i").value
26+
assert_equal 42.1ri, parse_expression("42.1ri").value
27+
assert_equal 3.14i, parse_expression("3.14i").value
28+
assert_equal 42r, parse_expression("42r").value
29+
assert_equal 0.5r, parse_expression("0.5r").value
30+
assert_equal 42ri, parse_expression("42ri").value
31+
assert_equal 0.5ri, parse_expression("0.5ri").value
32+
end
33+
34+
private
35+
36+
def parse_expression(source)
37+
YARP.parse(source).value.statements.body.first
3238
end
3339
end

0 commit comments

Comments
 (0)