40 lines
1.1 KiB
Nim
40 lines
1.1 KiB
Nim
import std/unittest
|
|
import pkg/stew/byteutils
|
|
import pkg/dagger/chunker
|
|
|
|
suite "Chunking":
|
|
test "should return proper size chunks":
|
|
proc reader(data: var openArray[byte], offset: Natural = 0): int {.gcsafe, closure.} =
|
|
let contents = "1234567890".toBytes
|
|
copyMem(addr data[0], unsafeAddr contents[offset], data.len)
|
|
return data.len
|
|
|
|
let chunker = Chunker.new(
|
|
reader = reader,
|
|
size = 10,
|
|
chunkSize = 2)
|
|
|
|
check chunker.getBytes() == "12".toBytes
|
|
check chunker.getBytes() == "34".toBytes
|
|
check chunker.getBytes() == "56".toBytes
|
|
check chunker.getBytes() == "78".toBytes
|
|
check chunker.getBytes() == "90".toBytes
|
|
check chunker.getBytes() == "".toBytes
|
|
|
|
test "should chunk file":
|
|
let (fileName, _, _) = instantiationInfo() # get this file's name
|
|
let path = "tests/dagger/" & filename
|
|
let file = open(path)
|
|
let fileChunker = newFileChunker(file = file)
|
|
|
|
var data: seq[byte]
|
|
while true:
|
|
let buff = fileChunker.getBytes()
|
|
if buff.len <= 0:
|
|
break
|
|
|
|
check buff.len <= fileChunker.chunkSize
|
|
data.add(buff)
|
|
|
|
check string.fromBytes(data) == readFile(path)
|