nimble package

This commit is contained in:
Xie Yanbo 2019-11-09 15:52:46 +08:00
parent b9c39010d7
commit 90d176e0fa
5 changed files with 71 additions and 46 deletions

13
leveldb.nimble Normal file
View File

@ -0,0 +1,13 @@
# Package
version = "0.2.0"
author = "Michał Zieliński"
description = "LevelDB wrapper for Nim"
license = "MIT"
srcDir = "src"
binDir = "bin"
bin = @["leveldb"]
# Dependencies
requires "nim >= 1.0.0"

View File

@ -1,7 +1,5 @@
import options, leveldb/raw
proc free(p: pointer) {.importc.}
type
LevelDb* = ref object
db: ptr leveldb_t
@ -15,6 +13,8 @@ const
levelDbTrue = uint8(1)
levelDbFalse = uint8(0)
proc free(p: pointer) {.importc.}
proc checkError(errPtr: cstring) =
if errPtr != nil:
defer: free(errPtr)
@ -127,47 +127,4 @@ proc removeDb*(name: string) =
checkError(err)
when isMainModule:
import sequtils
let env = leveldb_create_default_env()
let dbName = $(leveldb_env_get_test_directory(env))
let db = leveldb.open(dbName)
block version:
let (major, minor) = db.version()
doAssert major > 0
doAssert minor > 0
block getPutDelete:
doAssert db.get("hello") == none(string)
db.put("hello", "world")
doAssert db.get("hello") == some("world")
db.delete("hello")
doAssert db.get("hello") == none(string)
block iter:
db.put("aa", "1")
db.put("ba", "2")
db.put("bb", "3")
block iterNormal:
doAssert toSeq(db.iter()) ==
@[("aa", "1"), ("ba", "2"), ("bb", "3")]
block iterReverse:
doAssert toSeq(db.iter(reverse = true)) ==
@[("bb", "3"), ("ba", "2"), ("aa", "1")]
block iterSeek:
doAssert toSeq(db.iter(seek = "ab")) ==
@[("ba", "2"), ("bb", "3")]
block iterSeekReverse:
doAssert toSeq(db.iter(seek = "ab", reverse = true)) ==
@[("ba", "2"), ("aa", "1")]
block close:
db.close()
block remove:
removeDb(dbName)
discard

1
tests/config.nims Normal file
View File

@ -0,0 +1 @@
switch("path", "$projectDir/../src")

54
tests/test.nim Normal file
View File

@ -0,0 +1,54 @@
import unittest, options, sequtils
import leveldb, leveldb/raw
suite "leveldb":
setup:
let env = leveldb_create_default_env()
let dbName = $(leveldb_env_get_test_directory(env))
let db = leveldb.open(dbName)
teardown:
db.close()
removeDb(dbName)
test "version":
let (major, minor) = db.version()
check(major > 0)
check(minor > 0)
test "get nothing":
check(db.get("nothing") == none(string))
test "put and get":
db.put("hello", "world")
check(db.get("hello") == some("world"))
test "delete":
db.put("hello", "world")
db.delete("hello")
check(db.get("hello") == none(string))
proc initData(db: LevelDb) =
db.put("aa", "1")
db.put("ba", "2")
db.put("bb", "3")
test "iter":
initData(db)
check(toSeq(db.iter()) == @[("aa", "1"), ("ba", "2"), ("bb", "3")])
test "iter reverse":
initData(db)
check(toSeq(db.iter(reverse = true)) ==
@[("bb", "3"), ("ba", "2"), ("aa", "1")])
test "iter seek":
initData(db)
check(toSeq(db.iter(seek = "ab")) ==
@[("ba", "2"), ("bb", "3")])
test "iter seek reverse":
initData(db)
check(toSeq(db.iter(seek = "ab", reverse = true)) ==
@[("ba", "2"), ("aa", "1")])