1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/spec/ruby/core/enumerable/fixtures/classes.rb
eregon 1d15d5f080 Move spec/rubyspec to spec/ruby for consistency
* Other ruby implementations use the spec/ruby directory.
  [Misc #13792] [ruby-core:82287]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-09-20 20:18:52 +00:00

331 lines
5.2 KiB
Ruby

module EnumerableSpecs
class Numerous
include Enumerable
def initialize(*list)
@list = list.empty? ? [2, 5, 3, 6, 1, 4] : list
end
def each
@list.each { |i| yield i }
end
end
class NumerousWithSize < Numerous
def size
@list.size
end
end
class EachCounter < Numerous
attr_reader :times_called, :times_yielded, :arguments_passed
def initialize(*list)
super(*list)
@times_yielded = @times_called = 0
end
def each(*arg)
@times_called += 1
@times_yielded = 0
@arguments_passed = arg
@list.each do |i|
@times_yielded +=1
yield i
end
end
end
class Empty
include Enumerable
def each
end
end
class EmptyWithSize
include Enumerable
def each
end
def size
0
end
end
class ThrowingEach
include Enumerable
def each
raise "from each"
end
end
class NoEach
include Enumerable
end
# (Legacy form rubycon)
class EachDefiner
include Enumerable
attr_reader :arr
def initialize(*arr)
@arr = arr
end
def each
i = 0
loop do
break if i == @arr.size
yield @arr[i]
i += 1
end
end
end
class SortByDummy
def initialize(s)
@s = s
end
def s
@s
end
end
class ComparesByVowelCount
attr_accessor :value, :vowels
def self.wrap(*args)
args.map {|element| ComparesByVowelCount.new(element)}
end
def initialize(string)
self.value = string
self.vowels = string.gsub(/[^aeiou]/, '').size
end
def <=>(other)
self.vowels <=> other.vowels
end
end
class InvalidComparable
def <=>(other)
"Not Valid"
end
end
class ArrayConvertable
attr_accessor :called
def initialize(*values)
@values = values
end
def to_a
self.called = :to_a
@values
end
def to_ary
self.called = :to_ary
@values
end
end
class EnumConvertable
attr_accessor :called
attr_accessor :sym
def initialize(delegate)
@delegate = delegate
end
def to_enum(sym)
self.called = :to_enum
self.sym = sym
@delegate.to_enum(sym)
end
def respond_to_missing?(*args)
@delegate.respond_to?(*args)
end
end
class Equals
def initialize(obj)
@obj = obj
end
def ==(other)
@obj == other
end
end
class YieldsMulti
include Enumerable
def each
yield 1,2
yield 3,4,5
yield 6,7,8,9
end
end
class YieldsMultiWithFalse
include Enumerable
def each
yield false,2
yield false,4,5
yield false,7,8,9
end
end
class YieldsMultiWithSingleTrue
include Enumerable
def each
yield false,2
yield true,4,5
yield false,7,8,9
end
end
class YieldsMixed
include Enumerable
def each
yield 1
yield [2]
yield 3,4
yield 5,6,7
yield [8,9]
yield nil
yield []
end
end
class YieldsMixed2
include Enumerable
def self.first_yields
[nil, 0, 0, 0, 0, nil, :default_arg, [], [], [0], [0, 1], [0, 1, 2]]
end
def self.gathered_yields
[nil, 0, [0, 1], [0, 1, 2], [0, 1, 2], nil, :default_arg, [], [], [0], [0, 1], [0, 1, 2]]
end
def self.gathered_yields_with_args(arg, *args)
[nil, 0, [0, 1], [0, 1, 2], [0, 1, 2], nil, arg, args, [], [0], [0, 1], [0, 1, 2]]
end
def self.greedy_yields
[[], [0], [0, 1], [0, 1, 2], [0, 1, 2], [nil], [:default_arg], [[]], [[]], [[0]], [[0, 1]], [[0, 1, 2]]]
end
def each(arg=:default_arg, *args)
yield
yield 0
yield 0, 1
yield 0, 1, 2
yield(*[0, 1, 2])
yield nil
yield arg
yield args
yield []
yield [0]
yield [0, 1]
yield [0, 1, 2]
end
end
class ReverseComparable
include Comparable
def initialize(num)
@num = num
end
attr_accessor :num
# Reverse comparison
def <=>(other)
other.num <=> @num
end
end
class ComparableWithFixnum
include Comparable
def initialize(num)
@num = num
end
def <=>(fixnum)
@num <=> fixnum
end
end
class Uncomparable
def <=>(obj)
nil
end
end
class Undupable
attr_reader :initialize_called, :initialize_dup_called
def dup
raise "Can't, sorry"
end
def clone
raise "Can't, either, sorry"
end
def initialize
@initialize_dup = true
end
def initialize_dup(arg)
@initialize_dup_called = true
end
end
class Freezy
include Enumerable
def each
yield 1
yield 2
end
def to_a
super.freeze
end
end
class MapReturnsEnumerable
include Enumerable
class EnumerableMapping
include Enumerable
def initialize(items, block)
@items = items
@block = block
end
def each
@items.each do |i|
yield @block.call(i)
end
end
end
def each
yield 1
yield 2
yield 3
end
def map(&block)
EnumerableMapping.new(self, block)
end
end
end # EnumerableSpecs utility classes