spec/sparkey_spec.rb in sparkey-1.0.0 vs spec/sparkey_spec.rb in sparkey-1.1.0
- old
+ new
@@ -6,33 +6,212 @@
include Sparkey::Testing
before { @filename = random_filename }
after { delete(@filename) }
- it "functions as a key value store" do
- sparkey = Sparkey::Store.create(@filename, :compression_snappy, 1000)
- sparkey.put("first", "Michael")
- sparkey.put("second", "Adam")
- sparkey.put("third", "Tanner")
- sparkey.close
+ it "assigns values to keys" do
+ log_writer = Sparkey::LogWriter.new
+ log_writer.create(@filename, :compression_none, 100)
- sparkey = Sparkey::Store.open(@filename)
+ log_writer.put("first", "Michael")
+ log_writer.flush
- sparkey.size.must_equal 3
+ hash_writer = Sparkey::HashWriter.new
+ hash_writer.create(@filename)
- sparkey.get("first").must_equal("Michael")
- sparkey.delete("second")
- sparkey.flush
+ hash_reader = Sparkey::HashReader.new
+ hash_reader.open(@filename)
+ iterator = hash_reader.seek("first")
- sparkey.size.must_equal 2
+ iterator.get_value.must_equal("Michael")
- hash = Hash.new
- sparkey.each do |key, value|
- hash[key] = value
+ iterator.close
+ hash_reader.close
+ log_writer.close
+ end
+
+ it "deletes keys" do
+ log_writer = Sparkey::LogWriter.new
+ log_writer.create(@filename, :compression_none, 100)
+ log_writer.put("first", "Michael")
+ log_writer.flush
+
+ log_writer.delete("first")
+ log_writer.flush
+
+ hash_writer = Sparkey::HashWriter.new
+ hash_writer.create(@filename)
+
+ hash_reader = Sparkey::HashReader.new
+ hash_reader.open(@filename)
+ iterator = hash_reader.seek("first")
+
+ iterator.must_be(:invalid?)
+ hash_reader.entry_count.must_equal(0)
+
+ iterator.close
+ hash_reader.close
+ log_writer.close
+ end
+
+ it "has the max key length and max value length" do
+ log_writer = Sparkey::LogWriter.new
+ log_writer.create(@filename, :compression_none, 100)
+ log_writer.put("middle", "Adam")
+ log_writer.put("last", "Tanner")
+ log_writer.flush
+
+ log_reader = Sparkey::LogReader.new
+ log_reader.open(@filename)
+
+ log_reader.max_key_length.must_equal(6)
+ log_reader.max_value_length.must_equal(6)
+
+ log_reader.close
+ log_writer.close
+ end
+
+ it "builds a log filename from a hash filename" do
+ Sparkey.build_log_filename("sparkey.spi").must_equal("sparkey.spl")
+ end
+
+ it "iterates over the log file" do
+ log_writer = Sparkey::LogWriter.new
+ log_writer.create(@filename, :compression_none, 100)
+
+ log_writer.put("first", "Michael")
+ log_writer.put("middle initial", "A.")
+ log_writer.put("last", "Tanner")
+ log_writer.delete("middle initial")
+ log_writer.flush
+
+ log_reader = Sparkey::LogReader.new
+ log_reader.open(@filename)
+
+ log_iterator = Sparkey::LogIterator.new(log_reader)
+
+ log_iterator.must_be(:new?)
+
+ log_iterator.next
+
+ log_iterator.must_be(:active?)
+ log_iterator.must_be(:entry_put?)
+
+ log_iterator.key_length.must_equal(5)
+ log_iterator.value_length.must_equal(7)
+
+ log_iterator.get_key.must_equal("first")
+ log_iterator.get_value.must_equal("Michael")
+
+ log_iterator.next
+
+ key, iterations = "", 0
+ log_iterator.get_key_chunk(8) do |chunk|
+ iterations += 1
+ key << chunk
end
- hash.must_equal(
- "first" => "Michael",
- "third" => "Tanner"
- )
+ key.must_equal("middle initial")
+ iterations.must_equal(2)
+
+ value, iterations = "", 0
+ log_iterator.get_value_chunk(8) do |chunk|
+ iterations += 1
+ value << chunk
+ end
+
+ value.must_equal("A.")
+ iterations.must_equal(1)
+
+ log_iterator.skip(4)
+ log_iterator.must_be(:entry_delete?)
+
+ log_iterator.next
+ log_iterator.must_be(:closed?)
+
+ log_iterator.close
+ log_reader.close
+ log_writer.close
+ end
+
+ it "iterates over the hash file" do
+ log_writer = Sparkey::LogWriter.new
+ log_writer.create(@filename, :compression_none, 100)
+
+ log_writer.put("salutation", "Mr.")
+ log_writer.put("first", "Michael")
+ log_writer.put("middle", "Adam")
+ log_writer.put("last", "Tanner")
+ log_writer.delete("first")
+ log_writer.flush
+
+ hash_writer = Sparkey::HashWriter.new
+ hash_writer.create(@filename)
+
+ hash_reader = Sparkey::HashReader.new
+ hash_reader.open(@filename)
+
+ hash_reader.entry_count.must_equal(3)
+ hash_reader.collision_count.must_equal(0)
+
+ hash_iterator = Sparkey::HashIterator.new(hash_reader)
+
+ hash_iterator.must_be(:new?)
+
+ hash_iterator.next
+ hash_iterator.must_be(:active?)
+
+ hash_iterator.get_key.must_equal("salutation")
+ hash_iterator.get_value.must_equal("Mr.")
+
+ hash_iterator.next
+ hash_iterator.get_key.must_equal("middle")
+ hash_iterator.get_value.must_equal("Adam")
+
+ seek_iterator = hash_reader.seek("last")
+ seek_iterator.get_value.must_equal("Tanner")
+
+ seek_iterator.next
+ seek_iterator.must_be(:closed?)
+
+ invalid_iterator = hash_reader.seek("first")
+ invalid_iterator.must_be(:invalid?)
+
+ invalid_iterator.close
+ seek_iterator.close
+ hash_iterator.close
+ hash_reader.close
+ log_writer.close
+ end
+
+ it "compares iterators" do
+ log_writer = Sparkey::LogWriter.new
+ log_writer.create(@filename, :compression_none, 100)
+
+ log_writer.put("first", "Michael")
+ log_writer.put("middle", "Adam")
+ log_writer.put("last", "Tanner")
+ log_writer.flush
+
+ log_reader = Sparkey::LogReader.new
+ log_reader.open(@filename)
+
+ first_iterator = Sparkey::LogIterator.new(log_reader)
+ second_iterator = Sparkey::LogIterator.new(log_reader)
+
+ first_iterator.next
+ second_iterator.next
+
+ comparison = first_iterator <=> second_iterator
+ comparison.must_equal(0)
+
+ first_iterator.next
+ comparison = first_iterator <=> second_iterator
+ comparison.must_equal(1)
+
+ first_iterator.reset
+ first_iterator.next
+ second_iterator.next
+ comparison = first_iterator <=> second_iterator
+ comparison.must_equal(-1)
end
end