summaryrefslogtreecommitdiffstatshomepage
path: root/tests/extmod/btree1.py
blob: d142a370f4d8c4cf991ecdf4a2af8863d921bb6b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
try:
    import btree
    import io
    import errno
except ImportError:
    print("SKIP")
    raise SystemExit

# f = open("_test.db", "w+b")
f = io.BytesIO()
db = btree.open(f, pagesize=512)

mv = memoryview(b"bar1foo1")

db[b"foo3"] = b"bar3"
db[b"foo1"] = b"bar1"
# any type that implements buffer protocol works for key and value
db["foo2"] = "bar2"
db[mv[:4]] = mv[4:]

dbstr = str(db)
print(dbstr[:7], dbstr[-1:])

print(db[b"foo2"])
try:
    print(db[b"foo"])
except KeyError:
    print("KeyError")
print(db.get(b"foo"))
print(db.get(b"foo", b"dflt"))

del db[b"foo2"]
try:
    del db[b"foo"]
except KeyError:
    print("KeyError")

for k, v in db.items():
    print((k, v))

print("---")
for k, v in db.items(None, None):
    print((k, v))

print("---")
for k, v in db.items(b"f"):
    print((k, v))

print("---")
for k, v in db.items(b"f", b"foo3"):
    print((k, v))

print("---")
for k, v in db.items(None, b"foo3"):
    print((k, v))

print("---")
for k, v in db.items(b"f", b"foo3", btree.INCL):
    print((k, v))

print("---")
for k, v in db.items(None, None, btree.DESC):
    print((k, v))

print(db.seq(1, b"foo1"))
print(db.seq(1, b"qux"))

try:
    db.seq(b"foo1")
except OSError as e:
    print(e.errno == errno.EINVAL)

print(list(db.keys()))
print(list(db.values()))

for k in db:
    print(k)

db.put(b"baz1", b"qux1")

print("foo1", "foo1" in db)
print("foo2", "foo2" in db)
print("baz1", "baz1" in db)

try:
    print(db + db[b"foo1"])
except TypeError:
    print("TypeError")

db.flush()
db.close()
f.close()