Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions core/range/to_set_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
require_relative '../../spec_helper'
require_relative '../enumerable/fixtures/classes'

describe "Enumerable#to_set" do
it "returns a new Set created from self" do
(1..4).to_set.should == Set[1, 2, 3, 4]
(1...4).to_set.should == Set[1, 2, 3]
end

it "passes down passed blocks" do
(1..3).to_set { |x| x * x }.should == Set[1, 4, 9]
end

ruby_version_is "4.0" do
it "instantiates an object of provided as the first argument set class" do
set = nil
proc{set = (1..3).to_set(EnumerableSpecs::SetSubclass)}.should complain(/Enumerable#to_set/)
set.should be_kind_of(EnumerableSpecs::SetSubclass)
set.to_a.sort.should == [1, 2, 3]
end

it "raises a RangeError if the range is infinite" do
-> { (1..).to_set }.should raise_error(RangeError, "cannot convert endless range to a set")
-> { (1...).to_set }.should raise_error(RangeError, "cannot convert endless range to a set")
end
end

ruby_version_is ""..."4.0" do
it "instantiates an object of provided as the first argument set class" do
set = (1..3).to_set(EnumerableSpecs::SetSubclass)
set.should be_kind_of(EnumerableSpecs::SetSubclass)
set.to_a.sort.should == [1, 2, 3]
end
end

it "does not need explicit `require 'set'`" do
output = ruby_exe(<<~RUBY, options: '--disable-gems', args: '2>&1')
puts (1..3).to_set.to_a.inspect
RUBY

output.chomp.should == "[1, 2, 3]"
end
Comment on lines +36 to +42
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure what this spec achieves, that to_set works even if set isn't required?
It can't really test if to_set does or not require/autoload Set under the hood.
So I'm hesitating whether this is worth keeping, partly because ruby_exe tests are slow and the value seems minimal here, since Set being always available is or should be tested elsewhere.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It was a copy-paste from core/enumerable/to_set_spec.rb, but that one has been removed in commit d871546

I think these specs started as a way to test the autoload in Ruby 3.2, but since Ruby 3.2 is now the minimal version and we don't require set anywhere in the specs, it should probably be okay to just remove it.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#1323 removes it

end