import { expect } from "chai"; import "mocha"; import decodeBase128 from "./decodeBase128"; import encodeBase128 from "./encodeBase128"; const b = (...bytes: number[]) => new Uint8Array(bytes); describe("decodeBase128", () => { it("should decode correctly", () => { expect(decodeBase128(b())).to.deep.equal(b()); expect(decodeBase128(b(0))).to.deep.equal(b()); expect(decodeBase128(b(127, 64))).to.deep.equal(b(255)); expect(decodeBase128(b(127, 255))).to.deep.equal(b(255)); for (const src of [ b(), b(0), b(1), b(2), b(12), b(63), b(64), b(127), b(128), b(255), b(0, 0), b(0, 0, 0), b(3, 14, 15), b(11, 13, 3), b(11, 13, 15), b(127, 127, 127), b(128, 128, 128), b(128, 128, 255), b(255, 255, 255), b(255, 255, 255, 255), b(255, 255, 255, 255, 255), b(255, 255, 255, 255, 255, 255), b(255, 255, 255, 255, 255, 255, 255), b(255, 255, 255, 255, 255, 255, 255, 255), b(255, 255, 255, 255, 255, 255, 255, 255, 255), b(255, 255, 255, 255, 255, 255, 255, 255, 255, 255), b(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), b(23, 15, 34, 97, 190, 49, 1, 0, 44, 206, 255, 131, 82, 44), b(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), b(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), b(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), b( 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ), b( 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ), b( 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ), b( 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ), b( 169, 135, 230, 134, 133, 250, 241, 9, 169, 218, 63, 128, 71, 202, 142, 103, 215, 246, 216, 168, 240, 235, 131, 39, 65, 16, 90, 194, 91, 90, 25, 191, 183, 179, 135, 73, 242, 36, 157, 37, 123, 197, 225, 95, 81, 8, 177, 55, 193, 74, 81, 72, 177, 196, 167, 108, 120, 169, 135, 153, 177, 98, 203, 178, 143, 21, 1, 95, 100, 92, 218, 198, 69, 196, 154, 231, 104, 57, 144, 213, 2, 144, 186, 25, 118, 45, 245, 18, 193, 52, 146, 174, 219, 243, 41, 191, 228, 31, 220, 63, 224, 234, 167, 235, 33, 200, 113, 140, 186 ), b( 175, 50, 216, 68, 10, 217, 103, 125, 131, 198, 27, 219, 159, 68, 155, 223, 246, 247, 255, 233, 128, 18, 66, 103, 114, 39, 154, 16, 155, 194, 135, 158, 21, 141, 195, 205, 45, 150, 49, 150, 182, 30, 46, 200, 203, 108, 210, 47, 186, 146, 173, 24, 85, 219, 41, 124, 137, 52, 21, 166, 28, 217, 152, 67, 191, 247, 164, 47, 234, 132, 67, 74, 79, 23, 40, 96, 42, 88, 128, 248, 82, 32, 111, 210, 144, 124, 52, 230, 76, 119, 226, 202, 53, 221, 201, 123, 67, 210, 28, 39, 165, 133, 21, 223, 195, 200, 32, 109, 210, 86, 161, 133, 14, 40, 3, 67, 175, 181, 154, 68, 146, 44, 105, 31, 1, 56, 114, 191, 202, 218, 133, 118, 113, 170, 124, 2, 22, 7, 64, 93, 201, 64, 140, 229, 90, 102, 53, 144, 197, 57, 202, 14, 105, 215, 5, 53, 226, 185, 108, 211, 210, 79, 173, 3, 197, 90, 93, 91, 163, 125, 136, 12, 76, 50, 218, 127, 101, 246, 110, 55, 81, 132, 142, 207, 77, 69, 18, 78, 188, 222, 74, 220, 99, 174, 17, 6, 168, 202, 153, 147, 249, 153, 35, 51, 179, 224, 81, 28, 63, 100, 108, 127, 136, 109, 207, 181, 217, 150, 111, 130, 127, 68, 195, 172, 54, 96, 243, 253, 189, 253, 181, 129, 156, 41, 158, 146 ), b( 29, 32, 65, 243, 179, 170, 54, 15, 75, 130, 174, 238, 99, 11, 135, 83, 41, 180, 73, 40, 69, 172, 114, 110, 52, 33, 69, 216, 247, 217, 165, 169, 74, 170, 213, 171, 150, 234, 99, 190, 191, 154, 192, 125, 146, 185, 77, 184, 136, 13, 10, 116, 120, 50, 100, 55, 59, 113, 104, 187, 221, 183, 178, 67, 144, 124, 130, 229, 113, 89, 3, 92, 55, 76, 215, 191, 239, 130, 125, 130, 175, 137, 171, 246, 30, 10, 43, 154, 228 ), b( 92, 119, 107, 127, 251, 231, 5, 129, 115, 203, 167, 159, 52, 115, 67, 76, 28, 215, 33, 246, 118, 231, 12, 129, 80, 140, 133, 96, 8, 15, 48, 167, 14, 223, 28, 11, 47, 146, 149, 125, 221, 71, 102, 255, 178, 93, 126, 218, 172, 239, 3, 142, 230, 218, 255, 2, 195, 200, 254, 114, 163, 250, 249, 189, 240, 184, 165, 37, 233, 117, 3, 206, 64, 26, 78, 114, 102, 202, 193, 239, 65, 84, 160, 10, 173, 112, 255, 124, 58, 178, 228, 14, 229, 118, 179, 171, 124, 254, 110, 56, 248, 36, 136, 194, 207, 129, 6, 251, 222, 217, 140, 240, 252, 88, 179, 173, 57, 188, 99, 87, 163, 73, 31, 142, 198, 184, 208, 238, 35, 93, 16, 218, 201, 91, 52, 41, 9, 166, 50, 152, 70, 223, 104, 106, 166, 210, 109, 52, 189, 247 ), b( 170, 249, 201, 237, 90, 193, 127, 177, 170, 210, 12, 163, 1, 255, 214, 96, 99, 167, 156, 90, 84, 87, 252, 37, 78, 129, 13, 184, 104, 61, 98, 82, 203, 4, 170, 250, 216, 124, 236, 15, 133, 10, 154, 78, 20, 208, 20, 120, 133, 160, 170, 156, 136, 162, 45, 154, 242, 217, 45, 199, 83, 188, 11, 20, 141, 130, 159, 254, 185, 175, 238, 34, 230, 46, 162, 202, 90, 229, 209, 70, 181, 197, 22, 199, 218, 70, 134, 88, 118, 157, 128, 137, 156, 245, 134, 53, 31, 219, 101, 199, 190, 136, 246, 85 ), b( 124, 6, 219, 4, 204, 203, 172, 68, 98, 34, 149, 194, 57, 43, 0, 34, 110, 228, 58, 217, 150, 156, 91, 204, 241, 181, 229, 145, 188, 255, 246, 51, 19, 70, 104, 241, 88, 144, 110, 178, 28, 197, 82, 176, 69, 57, 241, 108, 12, 99, 70, 185, 200, 9, 250, 183, 47, 21, 33, 105, 43, 59, 142, 187, 204, 26, 239, 36, 196, 123, 222, 149, 139, 129, 85, 229, 160, 110, 55, 216, 105, 106, 131, 1, 110, 254, 213, 215, 212, 38, 124, 127, 144, 49, 106, 41, 87, 179, 254, 221, 117, 179, 15, 102, 169, 57, 207, 126, 70, 246, 221, 107, 6, 104, 109, 2, 184, 146, 8, 14, 83, 91, 133, 108, 237, 212, 188, 136, 36, 18, 29, 253, 199, 211, 54, 50, 238, 226, 198, 98, 255, 68, 13, 28, 127, 65, 97, 79, 86, 70, 145, 212, 237, 244, 122, 39, 80, 38, 128, 25, 231, 70, 168, 77, 13, 90, 162, 11, 199, 214, 207, 62, 9, 125, 22, 79, 58, 130, 252, 112, 144, 153 ), b( 26, 199, 171, 81, 139, 172, 201, 161, 81, 142, 162, 237, 137, 149, 118, 233, 203, 231, 71, 39, 13, 240, 87, 146, 169, 247, 121, 126, 208, 16, 243, 188, 126, 189, 66, 141, 45, 36, 221, 51, 59, 123, 227, 152, 194, 40, 114, 138, 79, 178, 201, 214, 66, 219, 87, 134, 97, 192, 239, 158, 7, 73, 84, 5, 131, 102, 39, 27, 220, 167, 226, 48, 105, 45, 37, 243, 225, 28, 123, 184 ), b( 4, 197, 32, 248, 37, 110, 137, 67, 3, 249, 58, 119, 50, 125, 179, 51, 137, 216, 204, 7, 97, 232, 24, 78, 149, 195, 81, 179, 68, 58, 146, 11, 189, 196, 42, 76, 34, 197, 140, 242, 24, 117, 16, 135, 241, 133, 169, 104, 151, 21, 33, 3, 26, 2, 58, 116, 97, 166, 103, 102, 182, 42, 162, 18, 142, 175, 3, 204, 127, 92, 21, 236, 34, 94, 172, 159, 208, 58, 188, 45, 128, 132, 243, 113, 114, 187, 155, 61, 251, 8, 125, 101, 227, 176, 254, 111, 64, 40, 12, 239, 76, 234, 43, 231, 45, 0, 74, 242, 46, 29, 5, 61, 31, 42, 220, 40, 92, 78, 145, 102, 228, 93, 208, 61, 16, 205, 172, 64, 35, 96, 186, 40, 4, 221 ), b( 60, 161, 196, 90, 156, 226, 172, 249, 239, 15, 61, 194, 103, 117, 64, 212, 234, 123, 10, 237, 183, 25, 177, 252, 19, 221, 92, 146, 100, 0, 205, 176, 38, 174, 122, 152, 187, 108, 154, 191, 10, 106, 251, 221, 72, 142, 47, 6, 75, 181, 149, 163, 63, 106, 253, 28, 117, 88, 94, 194, 154, 248, 172, 230, 249, 100, 161, 88, 142, 131, 81, 122, 138, 93, 133, 117, 195, 0, 176, 45, 55, 132, 203, 247, 109, 89, 216, 103, 182, 146, 166, 47, 92, 78, 203, 105, 111, 37, 8, 129, 50, 237, 157, 67, 109, 160, 100, 181, 59, 88, 231, 144, 140, 183, 110, 204, 150, 97, 123, 44, 255, 181, 232, 48, 20, 141, 113, 88, 67, 84, 238, 188, 254, 218, 118, 62, 196, 0, 92, 50, 94, 242, 88, 115, 189, 133, 237, 226, 249, 43, 29, 53, 72, 40, 97, 177, 110 ), b( 154, 193, 231, 124, 48, 135, 4, 244, 200, 98, 237, 121, 96, 231, 83, 159, 147, 20, 105, 198, 129, 175, 91, 102, 108, 7, 81, 229, 173, 2, 193, 104, 107, 36, 254, 237, 103, 168, 36, 122, 25, 120, 21, 42, 36, 30, 243, 201, 38, 117, 240, 207, 239, 110, 222, 135, 130, 15, 13, 231, 103, 117, 2, 250, 155, 134, 250, 186, 97, 218, 77, 133, 171, 133, 118, 53, 79, 122, 33, 247, 11, 95, 219, 40, 166, 205, 47, 209, 121, 186, 114, 241, 148, 43, 177, 186, 55, 238, 239, 8, 198, 115, 66, 227, 207, 163, 197, 205, 31, 190, 246, 183, 196, 130, 51, 216, 37, 12, 241 ), b( 109, 165, 188, 126, 108, 191, 30, 107, 137, 117, 240, 33, 139, 120, 206, 138, 148, 119, 248, 43, 43 ), b( 197, 203, 193, 243, 72, 235, 206, 210, 16, 15, 79, 32, 29, 213, 164, 88, 33, 124, 132, 43, 199, 156, 203, 234, 199, 47, 160, 205, 123, 239, 46, 180, 134, 57, 222, 148, 200, 232, 76, 203, 33, 192, 240, 240, 185, 109, 220, 228, 163, 192, 199, 39, 21, 80, 138, 196, 96, 220, 174, 10, 119, 36, 177, 129, 123, 111, 197, 8, 246, 129, 3, 26, 2, 251, 245, 237, 91, 85, 151, 157, 105, 66, 71, 151, 92, 44, 224, 109, 89, 140, 161, 68, 74, 95, 42, 203, 89, 167, 32, 147, 101, 181, 204, 253, 199, 80, 157, 112, 36, 217, 224, 26, 196, 11, 154, 168, 150, 72, 53, 184, 89, 240, 187, 24, 20, 51, 129, 159, 130, 84, 231, 187, 31, 194, 135, 209, 109, 20, 15, 167, 20, 49, 160, 97, 121, 80, 237, 74, 213, 147, 81, 83, 228, 254, 227, 108, 78, 110, 6, 238, 193, 61, 139, 195, 231, 143, 191, 137, 60, 13, 170, 157, 222, 149, 124, 90, 202, 198, 48, 202, 127, 114, 215, 250, 1, 7, 0, 207, 199, 89, 171, 56, 225, 151, 221, 219, 105, 53, 5, 137, 168, 246, 17, 188, 205, 60, 207, 248, 86, 73, 89, 187, 67, 228, 174, 150, 155, 144, 155, 18, 100, 171, 140, 55, 214, 220, 126, 62, 217, 76, 112, 203, 196, 111, 162, 159, 95, 192, 185, 168, 188, 67, 129, 5, 77, 219, 29 ), b( 254, 158, 31, 252, 61, 80, 33, 197, 224, 238, 216, 92, 138, 38, 46, 100, 247, 25, 230, 60, 96, 115, 103, 192, 38, 192, 81, 189, 74, 192, 164, 100, 68, 111, 53, 88, 104, 224, 224, 112, 132, 140, 122, 118, 189, 179, 181, 99, 49, 229, 61, 249, 118, 94, 94, 28, 250, 99, 229, 193, 115, 49, 29, 204, 4, 104, 13, 63, 110, 245, 36, 136, 244, 237, 195, 118, 122, 214, 93, 219, 64, 25 ), b( 74, 71, 106, 167, 172, 206, 17, 23, 73, 86, 85, 11, 194, 5, 177, 129, 166, 141, 184, 47, 216, 201, 58, 29, 96, 248, 25, 248, 28, 61, 53, 83, 127, 130, 245, 231, 202, 124, 174, 168, 139, 13, 68, 69, 150, 137, 29, 205, 32, 10, 252, 95, 89, 109, 94, 244, 246, 239, 206, 205, 61, 24, 50, 234, 120, 117, 31, 66, 73, 4, 155, 142, 30, 51, 212, 61, 30, 0, 211, 84, 122, 42, 72, 171, 154, 113, 157, 73, 134, 73, 252, 221, 108, 234, 135, 148, 55, 110, 8, 191, 218, 211, 199, 2, 11, 82, 95, 99, 52, 95, 39, 213, 67, 35, 61, 168, 218, 154, 161, 81, 173, 118, 46, 191, 59, 110, 126, 31, 108, 144, 123, 46, 90, 23, 217, 39, 38, 105, 81, 250, 3, 172, 206, 96, 151, 191, 121, 205, 77, 127, 87, 191, 213, 125, 174, 171, 100, 99, 217, 12, 97, 25, 235, 249, 214, 253, 144, 25, 122, 224, 100, 95, 111, 9, 172, 116, 48, 77, 248, 162, 123, 187, 134, 110, 21, 41, 4, 243, 221, 237, 224, 124, 94, 237, 72, 88, 55, 200, 150, 34, 121, 223, 49, 130, 245, 214, 232, 160, 231, 251, 134, 235, 207, 233, 72, 201, 54, 224, 30, 21, 58, 164, 7, 6 ), b( 154, 123, 158, 85, 116, 55, 50, 137, 75, 40, 190, 200, 124, 39, 197, 201, 135, 68, 212, 223, 201, 151, 26, 67, 184, 118, 186, 88, 221, 6, 145, 1, 113, 94, 83, 109, 246, 107, 224, 204, 183, 96, 93, 83, 63, 59, 153, 59, 214, 65, 174, 185, 251, 40, 126, 225, 35, 170, 117, 111, 53, 238, 85, 105, 4, 143, 33, 51, 109, 107, 160, 82, 101, 254, 254, 46, 156, 108, 64, 107, 164, 132, 156, 210, 126, 107, 17, 51, 246, 132, 66, 132, 242, 240, 251, 59, 95, 80, 131, 112, 47, 68, 18, 95, 185, 136, 183, 93, 90, 238, 70, 90, 214, 232, 24, 235, 183, 26, 97, 72, 67, 172, 114, 169, 165, 124, 10, 241, 40, 29, 116, 32, 42, 189, 49, 12, 252, 168, 160, 138, 42, 231, 194, 94, 185, 172, 34, 21, 207, 185, 40, 227, 87, 223, 186, 151, 48, 158, 132, 211, 126, 14, 56, 9, 55, 237, 138, 2, 131, 88, 190, 110, 3, 219, 157, 158, 109, 206, 32, 2, 234, 145, 141, 10, 209, 165, 59, 135, 120, 83, 142, 182, 11, 99, 253, 200, 41, 12, 144, 176, 150, 2, 222, 37, 110, 131, 16, 217, 202, 46, 18, 8, 105, 141, 73, 249, 233, 39, 32, 224, 205, 127, 77, 252 ), b( 77, 207, 245, 161, 85, 167, 47, 147, 32, 240, 162, 126, 27, 93, 17, 45, 189, 157, 96, 250, 33, 26, 191, 152, 32, 144, 213, 179, 182, 190, 239, 179, 20, 96, 126, 1, 161, 9, 211, 12, 184, 216, 22, 239, 205, 54, 146, 55, 105, 195, 208, 183, 82, 186, 137, 182, 179, 202, 134, 5, 142, 90, 163, 51, 9, 75, 80, 47, 231, 29, 98, 83, 136, 158, 137, 32, 159, 232, 44, 227, 224, 138, 53, 41, 231, 205, 212, 206, 247, 21, 104, 85, 209, 206, 63, 71, 67, 163, 51, 89, 78, 62, 5, 230, 33, 249, 136, 250, 117, 160, 218, 22, 21, 160, 62, 29, 117, 198, 10, 219, 241, 142, 199, 28, 192, 68, 112, 227, 125, 206, 195, 110, 50, 61, 9, 13, 200, 83, 162, 56, 199, 230, 125, 62, 18, 101, 134, 132, 218, 61, 48, 134, 92, 178, 19 ), b( 232, 115, 36, 148, 139, 57, 89, 29, 179, 140, 130, 185, 98, 114, 130, 154, 80, 166, 1, 130, 224, 248, 130 ), b( 28, 97, 187, 115, 252, 107, 254, 173, 43, 103, 77, 211, 74, 18, 238, 196, 71, 99, 149, 247, 188, 135, 114, 115, 27, 193, 110, 170, 151, 179, 252, 206, 140, 96, 166, 87, 125, 5, 93, 58, 193, 159, 104, 118, 112, 233, 221, 233, 2, 49, 29, 221, 109, 252, 123, 205, 63, 102, 229, 74, 88, 235, 182, 54, 247, 31, 52, 211, 78, 40, 207, 90, 200, 208, 171, 190, 106, 200, 212, 105, 13, 9, 26, 87, 208, 110, 109, 87, 22, 36, 199, 130, 243, 212, 129, 231, 3, 155, 165, 34, 226, 139, 230, 218, 87, 193, 198, 243, 253, 201, 80, 249, 16, 229, 115, 107, 115, 151, 229, 127, 33, 167, 235, 195, 75, 184, 19, 128, 195, 88, 148, 60, 156, 210, 155, 68, 54, 11, 17, 242, 234, 50, 132, 194, 90, 106, 128, 169, 135, 3, 23, 177, 15, 43, 204, 101, 106, 133, 245, 95, 3, 121, 238, 190, 180, 168, 93, 72, 70, 221, 137, 225, 59, 12, 38, 74, 45, 73, 204, 242, 132, 148, 223, 16, 104, 4, 16, 185, 175, 56, 120, 217, 121, 224, 98, 131, 221, 217, 72, 254, 96, 171, 15, 160, 45, 47, 60, 143, 137, 235, 53, 2, 145, 121, 31, 90, 243, 247, 5, 200, 218, 3, 161, 75 ), b( 213, 142, 114, 55, 219, 239, 173, 223, 35, 78, 180, 197, 220, 74, 239, 94, 175, 247, 104, 63, 126, 53, 93, 20, 140, 47, 111, 186, 96, 5, 145, 153, 60, 139, 3, 252, 164, 60, 75, 74, 75, 135, 111, 162, 85, 179, 139, 170, 50, 179, 117, 246, 191, 16, 150, 210, 167, 105, 18, 32, 198, 22, 72, 103, 149, 108, 246, 26, 94, 220, 15, 242, 21, 169, 48, 194, 218, 86, 173, 190, 208 ), ]) { expect(decodeBase128(encodeBase128(src))).to.deep.equal(src); } }); });