spec/functional/only_spec.rb in picky-4.13.0 vs spec/functional/only_spec.rb in picky-4.13.1

- old
+ new

@@ -1,9 +1,103 @@ # encoding: utf-8 # require 'spec_helper' describe 'Search#only' do + + it 'keeps allocations correctly' do + index = Picky::Index.new :books do + category :author + category :title + category :text + end + + thing = Struct.new :id, :author, :title, :text + index.add thing.new(1, 'peter', 'some title', 'some text') + index.add thing.new(2, 'some name', 'some title', 'some text') + + try = Picky::Search.new index do + only [:author, :text], + [:text] + end + + # These allocations are now exclusively kept. + # + try.search('some some').allocations.to_result.should == [ + [:books, 1.386, 2, [[:text, "some", "some"], [:text, "some", "some"]], [2, 1]], + # [:books, 1.386, 2, [[:text, "some", "some"], [:title, "some", "some"]], [2, 1]], + # [:books, 1.386, 2, [[:title, "some", "some"], [:text, "some", "some"]], [2, 1]], + # [:books, 1.386, 2, [[:title, "some", "some"], [:title, "some", "some"]], [2, 1]], + # [:books, 0.693, 1, [[:title, "some", "some"], [:author, "some", "some"]], [2]], + [:books, 0.693, 1, [[:author, "some", "some"], [:text, "some", "some"]], [2]], + # [:books, 0.693, 1, [[:author, "some", "some"], [:title, "some", "some"]], [2]], + # [:books, 0.693, 1, [[:text, "some", "some"], [:author, "some", "some"]], [2]], + # [:books, 0.0, 1, [[:author, "some", "some"], [:author, "some", "some"]], [2]] + ] + + # These allocations are now exclusively kept. + # + try.search('some some some').allocations.to_result.should == [ + [:books, 2.0789999999999997, 2, [[:text, "some", "some"], [:text, "some", "some"], [:text, "some", "some"]], [2, 1]], + # [:books, 2.0789999999999997, 2, [[:text, "some", "some"], [:text, "some", "some"], [:title, "some", "some"]], [2, 1]], + # [:books, 2.0789999999999997, 2, [[:text, "some", "some"], [:title, "some", "some"], [:text, "some", "some"]], [2, 1]], + # [:books, 2.0789999999999997, 2, [[:text, "some", "some"], [:title, "some", "some"], [:title, "some", "some"]], [2, 1]], + # [:books, 2.0789999999999997, 2, [[:title, "some", "some"], [:text, "some", "some"], [:text, "some", "some"]], [2, 1]], + # [:books, 2.0789999999999997, 2, [[:title, "some", "some"], [:text, "some", "some"], [:title, "some", "some"]], [2, 1]], + # [:books, 2.0789999999999997, 2, [[:title, "some", "some"], [:title, "some", "some"], [:text, "some", "some"]], [2, 1]], + # [:books, 2.0789999999999997, 2, [[:title, "some", "some"], [:title, "some", "some"], [:title, "some", "some"]], [2, 1]], + [:books, 1.386, 1, [[:author, "some", "some"], [:text, "some", "some"], [:text, "some", "some"]], [2]], + # [:books, 1.386, 1, [[:text, "some", "some"], [:text, "some", "some"], [:author, "some", "some"]], [2]], + # [:books, 1.386, 1, [[:title, "some", "some"], [:author, "some", "some"], [:title, "some", "some"]], [2]], + # [:books, 1.386, 1, [[:title, "some", "some"], [:author, "some", "some"], [:text, "some", "some"]], [2]], + # [:books, 1.386, 1, [[:title, "some", "some"], [:title, "some", "some"], [:author, "some", "some"]], []], + # [:books, 1.386, 1, [[:author, "some", "some"], [:text, "some", "some"], [:title, "some", "some"]], []], + # [:books, 1.386, 1, [[:text, "some", "some"], [:title, "some", "some"], [:author, "some", "some"]], []], + # [:books, 1.386, 1, [[:title, "some", "some"], [:text, "some", "some"], [:author, "some", "some"]], []], + # [:books, 1.386, 1, [[:author, "some", "some"], [:title, "some", "some"], [:text, "some", "some"]], []], + # [:books, 1.386, 1, [[:text, "some", "some"], [:author, "some", "some"], [:title, "some", "some"]], []], + # [:books, 1.386, 1, [[:text, "some", "some"], [:author, "some", "some"], [:text, "some", "some"]], []], + # [:books, 1.386, 1, [[:author, "some", "some"], [:title, "some", "some"], [:title, "some", "some"]], []], + # [:books, 0.693, 1, [[:text, "some", "some"], [:author, "some", "some"], [:author, "some", "some"]], []], + # [:books, 0.693, 1, [[:author, "some", "some"], [:text, "some", "some"], [:author, "some", "some"]], []], + # [:books, 0.693, 1, [[:author, "some", "some"], [:title, "some", "some"], [:author, "some", "some"]], []], + # [:books, 0.693, 1, [[:author, "some", "some"], [:author, "some", "some"], [:title, "some", "some"]], []], + # [:books, 0.693, 1, [[:title, "some", "some"], [:author, "some", "some"], [:author, "some", "some"]], []], + [:books, 0.693, 1, [[:author, "some", "some"], [:author, "some", "some"], [:text, "some", "some"]], [2]], + # [:books, 0.0, 1, [[:author, "some", "some"], [:author, "some", "some"], [:author, "some", "some"]], []] + ] + end + + it 'performs far better' do + index = Picky::Index.new :books do + category :author + category :title + category :text + end + + thing = Struct.new :id, :author, :title, :text + index.add thing.new(1, 'peter', 'some title', 'some text') + index.add thing.new(2, 'some name', 'some title', 'some text') + index.add thing.new(3, 'peter', 'some title', 'some text') + index.add thing.new(4, 'some name', 'some title', 'some text') + index.add thing.new(5, 'peter', 'some title', 'some text') + index.add thing.new(6, 'some name', 'some title', 'some text') + index.add thing.new(7, 'peter', 'some title', 'some text') + index.add thing.new(8, 'some name', 'some title', 'some text') + + try = Picky::Search.new index + + # Reasonably fast. + # + performance_of { try.search('some some') }.should < 0.0005 + + try.only [:author, :text], + [:text, :text] + + # Much faster. + # + performance_of { try.search('some some') }.should < 0.000175 + end it 'offers the option only' do index = Picky::Index.new :only do category :category1 category :category2 \ No newline at end of file