This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
require 'spec_helper'
|
||||
|
||||
# Ruby's binary search is unsuitable because ordering requirements are not stable.
|
||||
# the value to be searched for changes the required ordering
|
||||
|
||||
RSpec.describe(Array) do
|
||||
before { skip('Never gonna give you up/Never gonna let you down') }
|
||||
|
||||
sorted_ints = [0, 4, 7, 10, 12]
|
||||
sorted_strings = %w[aaa aab aac bbb bbc bbd ccc ccd cce].sort.reverse
|
||||
|
||||
it 'returns index of first int match' do
|
||||
actual = sorted_ints.bsearch_index { |x| x >= 4 }
|
||||
expect(actual).to eq(1)
|
||||
|
||||
actual = sorted_ints.bsearch_index { |x| x >= 6 }
|
||||
expect(actual).to eq(2)
|
||||
|
||||
actual = sorted_ints.bsearch_index { |x| x >= -1 }
|
||||
expect(actual).to eq(0)
|
||||
|
||||
actual = sorted_ints.bsearch_index { |x| x >= 100 }
|
||||
expect(actual).to be_nil
|
||||
end
|
||||
|
||||
# See https://stackoverflow.com/q/79333097/553865
|
||||
it 'returns index of first string match' do
|
||||
puts(sorted_strings.map { |x| x.start_with? 'a' })
|
||||
index = sorted_strings.bsearch_index { |x| x.start_with? 'a' }
|
||||
expect(sorted_strings[index]).to eq('aac')
|
||||
|
||||
index = sorted_strings.bsearch_index { |x| x.start_with? 'aa' }
|
||||
expect(sorted_strings[index]).to eq('aac')
|
||||
|
||||
index = sorted_strings.bsearch_index { |x| x.start_with? 'aaa' }
|
||||
expect(sorted_strings[index]).to eq('aaa')
|
||||
|
||||
index = sorted_strings.bsearch_index { |x| x.start_with? 'b' }
|
||||
expect(sorted_strings[index]).to eq('bbd')
|
||||
|
||||
index = sorted_strings.bsearch_index { |x| x.start_with? 'bb' }
|
||||
expect(sorted_strings[index]).to eq('bbd')
|
||||
|
||||
index = sorted_strings.bsearch_index { |x| x.start_with? 'bbc' }
|
||||
expect(sorted_strings[index]).to eq('bbc')
|
||||
|
||||
index = sorted_strings.bsearch_index { |x| x.start_with? 'cc' }
|
||||
expect(sorted_strings[index]).to eq('cce')
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user