def test_tuple_throughput(self):
        db = self.db
        db.open('test_tuple_throughput')
        db.delete('tuple')
        result = db.put('tuple', (2,3,4,5,6,))

        self.assertTrue(result)

        result = db.get('tuple')
        expected = (2, 3, 4, 5, 6)
        self.assertTupleEqual(result, expected)

        result = db.append('tuple', 3)
        expected = b'!:A1D!:2, 3, 4, 5, 6'
        self.assertEqual(result, expected)

        result = db.append('tuple', 3)
        expected = b'!:A1D!:2, 3, 4, 5, 6,3'
        self.assertEqual(result, expected)

        result = db.append('tuple', 3)
        expected = b'!:A1D!:2, 3, 4, 5, 6,3,3'
        self.assertEqual(result, expected)

        result = db.append('tuple', 3)
        expected = b'!:A1D!:2, 3, 4, 5, 6,3,3,3'
        self.assertEqual(result, expected)

        result = db.get('tuple')
        expected = (2, 3, 4, 5, 6, 3, 3, 3, 3,)
        self.assertTupleEqual(result, expected)
    def test_count(self):
        db = self.db
        db.open('test_count')

        db.put('a', 'b')
        db.put('c', 'c')
        db.put('c', 'd')

        self.assertEqual(db.count('a'), 1)
        self.assertEqual(db.count('c'), 2)
    def test_tuple_put_append_get(self):
        db = self.db
        db.open('test_tuples')

        key = 'poppy'
        ta = (10,11,12,)
        tb = (1,2,3)
        db.delete(key)

        db.put(key, ta)
        db.append(key, tb)
        c_list = db.collect(key, convert=False)
        self.assertEqual(len(c_list), 1)

        result = db.get(key)
        expected = ta + tb
        self.assertTupleEqual(result, expected)
    def test_get_last(self):
        db = self.db
        db.open('test_delete')
        db.wipe()
        db.put('a', 'b')
        db.put('a', 'e')
        db.put('b', 'c')
        db.put('c', 'd')
        db.put('c', 'e')

        self.assertEqual(db.get('a'), 'b')
        self.assertEqual(db.get('a', last=True), 'e')

        self.assertEqual(db.get('c'), 'd')
        self.assertEqual(db.get('c', last=True), 'e')

        self.assertEqual(db.get('b'), 'c')
        self.assertEqual(db.get('b', last=True), 'c')
        self.assertNotEqual(db.get('b', last=True), 'a')
        self.assertNotEqual(db.get('b'), 'a')
    def test_delete(self):
        db = self.db
        db.open('test_delete')
        db.wipe()
        db.put('a', 'b')
        db.put('a', 'e')
        db.put('b', 'c')
        db.put('c', 'd')
        db.put('c', 'e')
        db.put('d', 'f')

        keys = tuple(db.iter())
        expected = (
                ('a', 'b'),
                ('a', 'e'),
                ('b', 'c'),
                ('c', 'd'),
                ('c', 'e'),
                ('d', 'f')
                )
        self.assertTupleEqual(keys, expected)
        result = db.delete('a')
        self.assertTrue(result)
        keys = tuple(db.iter())
        expected = (
                ('b', 'c'),
                ('c', 'd'),
                ('c', 'e'),
                ('d', 'f')
                )
        self.assertTupleEqual(keys, expected)

        result = db.delete('c', value='d')
        keys = tuple(db.iter())
        expected = (
                ('b', 'c'),
                ('c', 'e'),
                ('d', 'f')
                )
        self.assertTupleEqual(keys, expected)
    def test_multiple_db(self):
        db = self.db
        db = DB(directory=TEST_WRITE_ENV)
        db.open('test_multiple_1')
        db.wipe()
        # Has only 1
        db.put('cake', 'moo')
        self.assertEqual(len(tuple(db.iter())), 1)

        db2 = DB(directory=TEST_WRITE_ENV)
        db2.open('test_multiple_2')
        db2.wipe()

        # only wipe the seperate db.
        self.assertEqual(len(tuple(db.iter())), 1)
        self.assertEqual(len(tuple(db2.iter())), 0)

        db.put('dog', 'blue')
        db2.put('cat', 'blue')
        # Did not wipe the first key from the first db
        self.assertCountEqual(tuple(db.iter()), (('dog', 'blue',), ('cake', 'moo') ))
        self.assertCountEqual(tuple(db2.iter()), (('cat', 'blue',),  ))
    def test_destroy(self):
        db = self.db
        db.open('test_wipe')
        db.put('doggy', (1,2,3))
        self.assertTupleEqual(db.get('doggy'), (1,2,3))

        db.close()
        db.open('test_wipe')
        self.assertTupleEqual(db.get('doggy'), (1,2,3))

        db.wipe()
        db.open('test_wipe')
        self.assertEqual(db.get('doggy'), None)

        db.put('doggy', (1,2,3))
        db.close()
        db.open('test_wipe')
        self.assertTupleEqual(db.get('doggy'), (1,2,3))

        db.start = Mock(side_effect=db.start)
        db.wipe(True)

        db.start.assert_called()
        self.assertEqual(db.get('doggy'), None)