spec/integration/rambling/trie_spec.rb in rambling-trie-0.9.3 vs spec/integration/rambling/trie_spec.rb in rambling-trie-1.0.0
- old
+ new
@@ -1,57 +1,8 @@
require 'spec_helper'
describe Rambling::Trie do
- shared_examples_for 'a compressable trie' do
- context 'and the trie is not compressed' do
- it_behaves_like 'a trie data structure'
-
- it 'does not alter the input' do
- word = 'string'
- trie.add word
-
- expect(word).to eq 'string'
- end
-
- it 'is marked as not compressed' do
- expect(trie).not_to be_compressed
- end
- end
-
- context 'and the trie is compressed' do
- before { trie.compress! }
-
- it_behaves_like 'a trie data structure'
-
- it 'is marked as compressed' do
- expect(trie).to be_compressed
- end
- end
- end
-
- shared_examples_for 'a trie data structure' do
- it 'contains all the words from the file' do
- words.each do |word|
- expect(trie).to include word
- expect(trie.word? word).to be true
- end
- end
-
- it 'matches the start of all the words from the file' do
- words.each do |word|
- expect(trie.match? word).to be true
- expect(trie.match? word[0..-2]).to be true
- expect(trie.partial_word? word).to be true
- expect(trie.partial_word? word[0..-2]).to be true
- end
- end
-
- it 'allows iterating over all the words' do
- expect(trie.to_a.sort).to eq words.sort
- end
- end
-
describe 'with words provided directly' do
it_behaves_like 'a compressable trie' do
let(:words) { %w[a couple of words for our full trie integration test] }
let(:trie) { Rambling::Trie.create { |t| words.each { |w| t << w } } }
end
@@ -75,8 +26,53 @@
describe 'with words with unicode characters from a file' do
it_behaves_like 'a compressable trie' do
let(:filepath) { File.join ::SPEC_ROOT, 'assets', 'test_words.en_US.txt' }
let(:words) { File.readlines(filepath).map &:chomp! }
let(:trie) { Rambling::Trie.create filepath }
+ end
+ end
+
+ describe 'saving and loading full trie from a file' do
+ let(:words_filepath) { File.join ::SPEC_ROOT, 'assets', 'test_words.en_US.txt' }
+ let(:words) { File.readlines(words_filepath).map &:chomp! }
+ let(:trie_to_serialize) { Rambling::Trie.create words_filepath }
+ let(:trie_filename) { File.join ::SPEC_ROOT, '..', 'tmp', 'trie-root' }
+
+ context 'when serialized with Ruby marshal format (default)' do
+ it_behaves_like 'a serializable trie' do
+ let(:trie_filepath) { "#{trie_filename}.marshal" }
+ let(:loaded_trie) { Rambling::Trie.load trie_filepath }
+ let(:serializer) { nil }
+ end
+ end
+
+ context 'when serialized with YAML' do
+ it_behaves_like 'a serializable trie' do
+ let(:trie_filepath) { "#{trie_filename}.yml" }
+ let(:loaded_trie) { Rambling::Trie.load trie_filepath }
+ let(:serializer) { nil }
+ end
+ end
+
+ context 'when serialized with zipped Ruby marshal format' do
+ before do
+ require 'zip'
+ @original_on_exists_proc = ::Zip.on_exists_proc
+ @original_continue_on_exists_proc = ::Zip.continue_on_exists_proc
+ ::Zip.on_exists_proc = true
+ ::Zip.continue_on_exists_proc = true
+ end
+
+ after do
+ require 'zip'
+ ::Zip.on_exists_proc = @original_on_exists_proc
+ ::Zip.continue_on_exists_proc = @original_continue_on_exists_proc
+ end
+
+ it_behaves_like 'a serializable trie' do
+ let(:trie_filepath) { "#{trie_filename}.marshal.zip" }
+ let(:loaded_trie) { Rambling::Trie.load trie_filepath }
+ let(:serializer) { nil }
+ end
end
end
end