Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tag: 1.5.0.RC3
Fetching contributors…

Cannot retrieve contributors at this time

122 lines (104 sloc) 3.086 kb
require 'test/unit'
class FlipTest < Test::Unit::TestCase
# flip (taken from post and comments at http://redhanded.hobix.com/inspect/hopscotchingArraysWithFlipFlops.html)
def test_skip_one
s = true
a = (1..10).reject { true if (s = !s) .. (s) }
assert_equal([1, 3, 5, 7, 9], a)
end
def test_skip_two
s = true
a = (1..10).reject { true if (s = !s) .. (s = !s) }
assert_equal([1, 4, 7, 10], a)
end
def test_skip_two_threedot
s = true
a = (1..10).reject { true if (s = !s) ... (s) }
assert_equal([1, 4, 7, 10], a)
end
def test_skip_four_two_and_threedot
s = true
a = (1..20).reject { true if (s = !s) .. (s = !s) and (s = !s) ... (s) }
assert_equal(['s', 'a'], local_variables)
assert_equal([1, 5, 9, 13, 17], a)
end
def test_big_flip
s = true;
a = (1..10).inject([]) do |ary, v|
ary << [] unless (s = !s) .. (s = !s)
ary.last << v
ary
end
assert_equal([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]], a)
end
def test_big_tripledot_flip
s = true
a = (1..64).inject([]) do |ary, v|
unless (s ^= v[2].zero?)...(s ^= !v[1].zero?)
ary << []
end
ary.last << v
ary
end
expected = [[1, 2, 3, 4, 5, 6, 7, 8],
[9, 10, 11, 12, 13, 14, 15, 16],
[17, 18, 19, 20, 21, 22, 23, 24],
[25, 26, 27, 28, 29, 30, 31, 32],
[33, 34, 35, 36, 37, 38, 39, 40],
[41, 42, 43, 44, 45, 46, 47, 48],
[49, 50, 51, 52, 53, 54, 55, 56],
[57, 58, 59, 60, 61, 62, 63, 64]]
assert_equal(expected, a)
end
def test_flip_in_conditional
assert_equal(0, (true..false) ? 0 : 1)
assert_equal(1, (false..true) ? 0 : 1)
assert_equal(0, (5..8) ? 0 : 1)
assert_equal(0, (Object.new..Object.new) ? 0 : 1)
end
# JRUBY-2046
def test_flip_in_conditional_in_eval
# We need at least 2 vars, or 0,
# in order to trigger the bug.
extra_var = nil
expected = nil
eval("expected = (true..false) ? 0 : 1")
assert_equal(0, expected)
expected = nil
eval("expected = (false..true) ? 0 : 1")
assert_equal(1, expected)
expected = nil
eval("expected = (5..8) ? 0 : 1")
assert_equal(0, expected)
expected = nil
eval("expected = (Object.new..Object.new) ? 0 : 1")
assert_equal(0, expected)
end
# JRUBY-2046
def test_flip_in_eval_in_method
def method
eval("(true..false) ? 1 : 0")
end
assert_equal(1, method)
end
# JRUBY-2046
def test_flip_in_class_eval
assert_equal(1, Object.class.class_eval("(true..false) ? 1 : 0"))
end
# JRUBY-2046
def test_flip_in_instance_eval
assert_equal(1, Object.new.instance_eval("(true..false) ? 1 : 0"))
end
# JRUBY-2046
def test_flip_in_eval_in_instance_eval
res = Object.new.instance_eval {
eval("(true..false) ? 1 : 0")
}
assert_equal(1, res)
end
# JRUBY-2046
def test_flip_in_eval_in_module
res = eval("module M; eval('(true..false) ? 1 : 0'); end")
assert_equal(1, res)
end
end
Jump to Line
Something went wrong with that request. Please try again.