diff options
author | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-05-07 12:04:49 +0000 |
---|---|---|
committer | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-05-07 12:04:49 +0000 |
commit | 95e8c48dd3348503a8c7db5d0498894a1b676395 (patch) | |
tree | 9eef7f720314ebaff56845a74e203770e62284e4 /spec/rubyspec/core/enumerable/fixtures | |
parent | ed7d803500de38186c74bce94d233e85ef51e503 (diff) |
Add in-tree mspec and ruby/spec
* For easier modifications of ruby/spec by MRI developers.
* .gitignore: track changes under spec.
* spec/mspec, spec/rubyspec: add in-tree mspec and ruby/spec.
These files can therefore be updated like any other file in MRI.
Instructions are provided in spec/README.
[Feature #13156] [ruby-core:79246]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58595 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'spec/rubyspec/core/enumerable/fixtures')
-rw-r--r-- | spec/rubyspec/core/enumerable/fixtures/classes.rb | 331 |
1 files changed, 331 insertions, 0 deletions
diff --git a/spec/rubyspec/core/enumerable/fixtures/classes.rb b/spec/rubyspec/core/enumerable/fixtures/classes.rb new file mode 100644 index 0000000000..26a8aff8e2 --- /dev/null +++ b/spec/rubyspec/core/enumerable/fixtures/classes.rb @@ -0,0 +1,331 @@ +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 |