Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add rocksdb.swift #5 #40

Closed
wants to merge 7 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions Database/Package.resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"originHash" : "3d98e183a568a5accbc0c0c5599a833ac3f72dcbc6225970d7263ed1570547d8",
"pins" : [
{
"identity" : "rocksdb.swift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/TapeIt/rocksdb.swift.git",
"state" : {
"revision" : "7eae85eb67d8225efd7e313d3900820032ae51fe",
"version" : "6.29.5"
}
}
],
"version" : 3
}
8 changes: 7 additions & 1 deletion Database/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,17 @@ let package = Package(
targets: ["Database"]
),
],
dependencies: [
.package(url: "https://github.com/TapeIt/rocksdb.swift.git", from: "6.29.5"),
],
targets: [
// Targets are the basic building blocks of a package, defining a module or a test suite.
// Targets can depend on other targets in this package and products from dependencies.
.target(
name: "Database"
name: "Database",
dependencies: [
.product(name: "RocksDB", package: "rocksdb.swift"),
]
),
.testTarget(
name: "DatabaseTests",
Expand Down
3 changes: 1 addition & 2 deletions Database/Sources/Database/Database.swift
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
// The Swift Programming Language
// https://docs.swift.org/swift-book
@_exported import RocksDB
152 changes: 145 additions & 7 deletions Database/Tests/DatabaseTests/DatabaseTests.swift
Original file line number Diff line number Diff line change
@@ -1,13 +1,151 @@
@testable import RocksDB
import XCTest

@testable import Database

final class DatabaseTests: XCTestCase {
func testExample() throws {
// XCTest Documentation
// https://developer.apple.com/documentation/xctest
var database: RocksDB!

func testSimplePut() {
let path = URL(fileURLWithPath: "/tmp/\(UUID().uuidString)")

do {
database = try RocksDB(path: path)

try database.put(key: "testText", value: "lolamkhaha")
try database.put(key: "testEmoji", value: "😂")
try database.put(key: "testTextEmoji", value: "emojitext 😂")
try database.put(key: "testMultipleEmoji", value: "😂😂😂")

XCTAssertEqual(try database.get(type: String.self, key: "testText"), "lolamkhaha")
XCTAssertEqual(try database.get(type: String.self, key: "testEmoji"), "😂")
XCTAssertEqual(try database.get(type: String.self, key: "testTextEmoji"), "emojitext 😂")
XCTAssertEqual(try database.get(type: String.self, key: "testMultipleEmoji"), "😂😂😂")
} catch {
XCTFail("An error occurred during simple put test: \(error)")
}

do {
try FileManager.default.removeItem(at: database.path)
database = nil
} catch {
XCTFail("Failed to remove RocksDB path: \(error)")
}
}

func testSimpleDelete() {
let path = URL(fileURLWithPath: "/tmp/\(UUID().uuidString)")

do {
database = try RocksDB(path: path)

try database.put(key: "testDeleteKey", value: "this is a simple value 😘")
try database.delete(key: "testDeleteKey")

XCTAssertEqual(try database.get(type: String.self, key: "testDeleteKey"), "")

} catch {
XCTFail("An error occurred during simple delete test: \(error)")
}
do {
try FileManager.default.removeItem(at: database.path)
database = nil
} catch {
XCTFail("Failed to remove RocksDB path: \(error)")
}
}

func testSimpleIterator() {
let orderedKeysAndValues = [
(key: "testEmoji", value: "😂"),
(key: "testMultipleEmoji", value: "😂😂😂"),
(key: "testText", value: "lolamkhaha"),
(key: "testTextEmoji", value: "emojitext 😂"),
]

do {
let path = URL(fileURLWithPath: "/tmp/\(UUID().uuidString)")
database = try RocksDB(path: path)

for (k, v) in orderedKeysAndValues {
try database.put(key: k, value: v)
}

var i = 0
for (key, val) in database.sequence(keyType: String.self, valueType: String.self) {
XCTAssertEqual(key, orderedKeysAndValues[i].key)
XCTAssertEqual(val, orderedKeysAndValues[i].value)
i += 1
}
XCTAssertEqual(i, 4)

i = 1
for (key, val) in database.sequence(keyType: String.self, valueType: String.self, gte: "testMultipleEmoji") {
XCTAssertEqual(key, orderedKeysAndValues[i].key)
XCTAssertEqual(val, orderedKeysAndValues[i].value)
i += 1
}
XCTAssertEqual(i, 4)

i = 2
for (key, val) in database.sequence(keyType: String.self, valueType: String.self, gte: "testText") {
XCTAssertEqual(key, orderedKeysAndValues[i].key)
XCTAssertEqual(val, orderedKeysAndValues[i].value)
i += 1
}
XCTAssertEqual(i, 4)

i = 3
for (key, val) in database.sequence(keyType: String.self, valueType: String.self, lte: "testTextEmoji") {
XCTAssertEqual(key, orderedKeysAndValues[i].key)
XCTAssertEqual(val, orderedKeysAndValues[i].value)
i -= 1
}
XCTAssertEqual(i, -1)

i = 2
for (key, val) in database.sequence(keyType: String.self, valueType: String.self, lte: "testText") {
XCTAssertEqual(key, orderedKeysAndValues[i].key)
XCTAssertEqual(val, orderedKeysAndValues[i].value)
i -= 1
}
XCTAssertEqual(i, -1)
} catch {
XCTFail("An error occurred during simple iterator test: \(error)")
}

do {
try FileManager.default.removeItem(at: database.path)
database = nil
} catch {
XCTFail("Failed to remove RocksDB path: \(error)")
}
}

func testBatchOperations() {
do {
let prefixedPath = "/tmp/\(UUID().uuidString)"
let prefixedDB = try RocksDB(path: URL(fileURLWithPath: prefixedPath), prefix: "correctprefix")
try prefixedDB.put(key: "testText", value: "lolamkhaha")
try prefixedDB.put(key: "testEmoji", value: "😂")
try prefixedDB.put(key: "testTextEmoji", value: "emojitext 😂")
try prefixedDB.put(key: "testMultipleEmoji", value: "😂😂😂")

try prefixedDB.batch(operations: [
.delete(key: "testText"),
.put(key: "someThing", value: "someValue"),
.delete(key: "someThing"),
.put(key: "secondKey", value: "anotherValue"),
.put(key: "testText", value: "textTextValue"),
])

XCTAssertEqual(try prefixedDB.get(type: String.self, key: "testEmoji"), "😂")
XCTAssertEqual(try prefixedDB.get(type: String.self, key: "someThing"), "")
XCTAssertEqual(try prefixedDB.get(type: String.self, key: "secondKey"), "anotherValue")
XCTAssertEqual(try prefixedDB.get(type: String.self, key: "testText"), "textTextValue")

try FileManager.default.removeItem(at: prefixedDB.path)

// Defining Test Cases and Test Methods
// https://developer.apple.com/documentation/xctest/defining_test_cases_and_test_methods
} catch {
XCTFail("An error occurred during batch test: \(error)")
}
}
}
Loading