require 'spec_helper' describe Picky::Generators::Partial::Substring do context 'default from' do let(:generator) { described_class.new } describe 'use_exact_for_partial?' do it 'returns false' do described_class.new.use_exact_for_partial?.should == false end end describe 'from' do it 'should return the right value' do generator.from.should == 1 end end describe 'generate_from' do it 'should generate the right index' do generator.generate_from(florian: [1], flavia: [2]).should == { florian: [1], floria: [1], flori: [1], flor: [1], flo: [1], fl: [1, 2], f: [1, 2], flavia: [2], flavi: [2], flav: [2], fla: [2] } end it "should be fast" do performance_of { generator.generate_from(florian: [1], flavia: [2]) }.should < 0.0001 end it "should handle duplicate ids" do generator.generate_from(flo: [1], fla: [1]).should == { flo: [1], fl: [1], f: [1], fla: [1] } end end end context 'from set' do describe 'negative from' do before(:each) do @generator = described_class.new from: -2 end it 'should generate the right index' do @generator.generate_from(florian: [1], flavia: [2]).should == { florian: [1], floria: [1], flavia: [2], flavi: [2] } end end context "large from" do before(:each) do @generator = described_class.new from: 10 end describe 'generate_from' do it 'should generate the right index' do @generator.generate_from(florian: [1], :'01234567890' => [2] ).should == { :florian => [1], :'01234567890' => [2], :'0123456789' => [2] } end end end context 'default to' do before(:each) do @generator = described_class.new from: 4 end describe 'to' do it 'should return the right value' do @generator.to.should == -1 end end describe 'from' do it 'should return the right value' do @generator.from.should == 4 end end describe 'generate_from' do it 'should generate the right index' do @generator.generate_from( :florian => [1], :flavia => [2] ).should == { :florian => [1], :floria => [1], :flori => [1], :flor => [1], :flavia => [2], :flavi => [2], :flav => [2] } end end describe "a bigger example with disjunct symbols" do before(:each) do abc = ('A'..'Z').to_a + ('a'..'z').to_a @index = {} 52.times do |i| @index[abc.join.to_sym] = [i] character = abc.shift abc << character end end it "should be fast" do performance_of { @generator.generate_from(@index) }.should < 0.008 end end describe "a bigger example with almost identical symbols" do before(:each) do abc = ('A'..'Z').to_a + ('a'..'z').to_a @index = {} 52.times do |i| @index[(abc.join + abc[i].to_s).to_sym] = [i] end end it "should be fast" do performance_of { @generator.generate_from(@index) }.should < 0.0045 end end end context 'to set' do before(:each) do @generator = described_class.new from: 4, to: -2 end describe 'to' do it 'should return the right value' do @generator.to.should == -2 end end describe 'from' do it 'should return the right value' do @generator.from.should == 4 end end describe 'generate_from' do it 'should generate the right index' do @generator.generate_from( :florian => [1], :flavia => [2] ).should == { :floria => [1], :flori => [1], :flor => [1], :flavi => [2], :flav => [2] } end end end context 'to set' do before(:each) do @generator = described_class.new from: 4, to: 0 end describe 'to' do it 'should return the right value' do @generator.to.should == 0 end end describe 'from' do it 'should return the right value' do @generator.from.should == 4 end end describe 'generate_from' do it 'should generate the right index' do @generator.generate_from( :florian => [1], :flavia => [2] ).should == { :florian => [1], :floria => [1], :flori => [1], :flor => [1], :flavia => [2], :flavi => [2], :flav => [2] } end end end context 'to set, negative from' do before(:each) do @generator = described_class.new from: -3, to: -2 end describe 'to' do it 'should return the right value' do @generator.to.should == -2 end end describe 'from' do it 'should return the right value' do @generator.from.should == -3 end end describe 'generate_from' do it 'should generate the right index' do @generator.generate_from( :florian => [1], :flavia => [2] ).should == { :floria => [1], :flori => [1], :flavi => [2], :flav => [2] } end end end end end