Skip to content

Instantly share code, notes, and snippets.

@golomidov
Created October 21, 2016 10:52
Show Gist options
  • Save golomidov/141d2eeb1a13f4815afef7bbc2606e02 to your computer and use it in GitHub Desktop.
Save golomidov/141d2eeb1a13f4815afef7bbc2606e02 to your computer and use it in GitHub Desktop.
no flatten flatten with same behavoir
require 'minitest/autorun'
include MiniTest::Assertions
def arr_deep(arr)
raise NoMethodError if (!arr.respond_to?(:to_a) or arr.nil?)
arr.to_a.map do |q|
if q.is_a?(Array)
arr_deep(q)
else
q
end
end
end
class TestArrDeep < Minitest::Test
def exception_class_for_flatten(sample)
save_error = ZeroDivisionError
begin
s.flatten
rescue Exception => e
save_error = e.class
end
return save_error
end
def test_complex
s = nil
assert_raises exception_class_for_flatten(s) do
arr_deep(s)
end
s = :a
assert_raises exception_class_for_flatten(s) do
arr_deep(s)
end
s = 1
assert_raises exception_class_for_flatten(s) do
arr_deep(s)
end
s = []
assert_equal arr_deep(s).join(", "), s.flatten.join(", "), "Empty"
s = {}
assert_equal arr_deep(s).join(", "), s.flatten.join(", "), "Empty hash"
s = {a:2}
assert_equal arr_deep(s).join(", "), s.flatten.join(", "), "Hash"
s = [1]
assert_equal arr_deep(s).join(", "), s.flatten.join(", "), "Simple"
s = ["1"]
assert_equal arr_deep(s).join(", "), s.flatten.join(", "), "Simple string"
s = [1, nil]
assert_equal arr_deep(s).join(", "), s.flatten.join(", "), "Simple, nil"
s = [1, nil, :aa]
assert_equal arr_deep(s).join(", "), s.flatten.join(", "), "Simple, nil, sym"
s = [[1,3,nil,[2]],{a:2},4]
assert_equal arr_deep(s).join(", "), s.flatten.join(", "), "Complex, hash, nil"
s = [[1,3,nil,[2]],{a:2, b:4, :aa => 5},4]
assert_equal arr_deep(s).join(", "), s.flatten.join(", "), "Complex, complex hash, nil"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment