nim-stew/tests/test_byteutils.nim

90 lines
2.4 KiB
Nim
Raw Normal View History

2019-07-06 18:07:41 +00:00
# byteutils
# Copyright (c) 2018 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at http://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at http://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
import unittest,
2019-10-02 10:54:13 +00:00
../stew/[byteutils, io]
proc compilationTest {.exportc: "compilationTest".} =
var bytes = @[1.byte, 2, 3, 4]
writeFile("test", bytes)
2019-07-06 18:07:41 +00:00
suite "Byte utils":
let simpleBArray = [0x12.byte, 0x34, 0x56, 0x78]
test "hexToByteArray: Inplace partial string":
let s = "0x1234567890"
var a: array[5, byte]
hexToByteArray(s, a, 1, 3)
check a == [0.byte, 0x34, 0x56, 0x78, 0]
test "hexToByteArray: Inplace full string":
let s = "0xffffffff"
var a: array[4, byte]
hexToByteArray(s, a)
check a == [255.byte, 255, 255, 255]
test "hexToByteArray: Return array":
let
s = "0x12345678"
a = hexToByteArray[4](s)
check a == simpleBArray
test "toHex":
check simpleBArray.toHex == "12345678"
test "Array concatenation":
check simpleBArray & simpleBArray ==
[0x12.byte, 0x34, 0x56, 0x78, 0x12, 0x34, 0x56, 0x78]
test "hexToPaddedByteArray":
block:
let a = hexToPaddedByteArray[4]("0x123")
check a.toHex == "00000123"
block:
let a = hexToPaddedByteArray[4]("0x1234")
check a.toHex == "00001234"
block:
let a = hexToPaddedByteArray[4]("0x1234567")
check a.toHex == "01234567"
block:
let a = hexToPaddedByteArray[4]("0x12345678")
check a.toHex == "12345678"
block:
let a = hexToPaddedByteArray[32]("0x68656c6c6f20776f726c64")
check a.toHex == "00000000000000000000000000000000000000000068656c6c6f20776f726c64"
block:
expect AssertionError:
discard hexToPaddedByteArray[2]("0x12345")
2019-12-19 12:29:38 +00:00
test "lessThan":
let
a = [0'u8, 1, 2]
b = [2'u8, 1, 0]
c = [0'u8, 1, 2, 3]
d = [0'u8, 1, 3, 3]
check:
not (a < a)
a < b
not (b < a)
c < b
not (b < c)
a < c
not (c < a)
c < d
not (d < c)
test "strings":
check:
"a".toBytes() == @[byte(ord('a'))]
string.fromBytes([byte(ord('a'))]) == "a"
cast[ptr UncheckedArray[byte]](cstring(string.fromBytes([byte(ord('a'))])))[1] == byte(0)