diff options
author | Kevin Newton <[email protected]> | 2023-12-07 10:39:21 -0500 |
---|---|---|
committer | git <[email protected]> | 2023-12-07 16:00:41 +0000 |
commit | c05278e425a7b7cadf0bf299ecfbe0ae9525c75c (patch) | |
tree | eda8da8cc72f9e50f904ff12d17fa926f51c6451 /test/prism/ruby_api_test.rb | |
parent | 0dc40bd2b740898fac4c6d4193ab6cd7ad52c05d (diff) |
[ruby/prism] Update ordering of integer base flags
https://github.com/ruby/prism/commit/d711950d5f
Diffstat (limited to 'test/prism/ruby_api_test.rb')
-rw-r--r-- | test/prism/ruby_api_test.rb | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/test/prism/ruby_api_test.rb b/test/prism/ruby_api_test.rb index 9da326b2b8..3bf89f3339 100644 --- a/test/prism/ruby_api_test.rb +++ b/test/prism/ruby_api_test.rb @@ -124,6 +124,29 @@ module Prism assert parse_expression("<<~`HERE`\nfoo \#{1}\nHERE\n").heredoc? end + # Through some bit hackery, we want to allow consumers to use the integer + # base flags as the base itself. It has a nice property that the current + # alignment provides them in the correct order. So here we test that our + # assumption holds so that it doesn't change out from under us. + # + # In C, this would look something like: + # + # ((flags & ~DECIMAL) << 1) || 10 + # + # We have to do some other work in Ruby because 0 is truthy and ~ on an + # integer doesn't have a fixed width. + def test_integer_base_flags + base = -> (node) do + value = (node.send(:flags) & (0b1111 - IntegerBaseFlags::DECIMAL)) << 1 + value == 0 ? 10 : value + end + + assert_equal 2, base[parse_expression("0b1")] + assert_equal 8, base[parse_expression("0o1")] + assert_equal 10, base[parse_expression("0d1")] + assert_equal 16, base[parse_expression("0x1")] + end + private def parse_expression(source) |