| % SDNV library tests |
| |
| ############ |
| ############ |
| + Test SDNV encoding/decoding |
| |
| = Load SDNVUtil |
| |
| # Explicit to load SDNVUtil |
| load_contrib("sdnv") |
| |
| = Define utils |
| |
| def doTestVector(vec): |
| # Test numbers individually |
| for n in vec: |
| ba = SDNVUtil.encode(n) |
| (num, sdnvLen) = SDNVUtil.decode(ba, 0) |
| if num != n: |
| print("Error encoding/decoding", n) |
| return False |
| # Encode them all in a bunch |
| ba = bytearray() |
| for n in vec: |
| temp = SDNVUtil.encode(n) |
| ba = ba + temp |
| offset = 0 |
| outNums = [] |
| for n in vec: |
| (num, sdnvLen) = SDNVUtil.decode(ba, offset) |
| outNums.append(num) |
| offset += sdnvLen |
| if outNums != vec: |
| print("Failed on multi-number encode/decode") |
| return False |
| return True |
| |
| = Vector tests: small ints |
| |
| ba = bytearray() |
| theNums = [0, 1, 2, 5, 126, 127, 128, 129, |
| 130, 150, 190, 220, 254, 255, 256] |
| assert doTestVector(theNums) |
| |
| = Vector tests: big ints |
| |
| theNums = [0, 1, 0, 1, 0, 128, 32765, |
| SDNVUtil.maxValue - 10, 4, 32766, 32767, 32768, 32769] |
| assert doTestVector(theNums) |
| |
| = 100 random vector tests |
| |
| import random |
| |
| def doRandomTestVector(howMany): |
| vec = [] |
| for i in range(0, howMany): |
| vec.append(random.randint(0, SDNVUtil.maxValue)) |
| result = doTestVector(vec) |
| return result |
| |
| assert doRandomTestVector(100) |
| |
| = SDVN tests |
| |
| # Tests using the SDNV class |
| s = SDNV(30) |
| b = s.encode(17) |
| theNums = [0, 4, 20, 29, 30, 31, 33] |
| not_enc = [] |
| for n in theNums: |
| try: |
| b = s.encode(n) |
| except SDNVValueError as e: |
| print("Could not encode", n, "-- maximum value is:", e.maxValue) |
| not_enc.append(n) |
| |
| not_enc.sort() |
| assert not_enc == [31, 33] |