@@ 18,6 18,7 @@ use bytes;
let outbuf = memio::dynamic();
let encsz = encode(&outbuf, &inmsg)!;
assert(encsz == 13);
+ assert(inmsg.checksum == 8672);
let msg = memio::buffer(&outbuf);
@@ 60,6 61,7 @@ use bytes;
let outbuf = memio::dynamic();
let encsz = encode(&outbuf, &inmsg)!;
assert(encsz == 13);
+ assert(inmsg.checksum == 10720);
let msg = memio::buffer(&outbuf);
@@ 98,6 100,7 @@ use bytes;
let outbuf = memio::dynamic();
let encsz = encode(&outbuf, &inmsg)!;
assert(encsz == 4);
+ assert(inmsg.checksum == 64757);
let msg = memio::buffer(&outbuf);
@@ 129,6 132,7 @@ use bytes;
let outbuf = memio::dynamic();
let encsz = encode(&outbuf, &inmsg)!;
assert(encsz == 4);
+ assert(inmsg.checksum == 62709);
let msg = memio::buffer(&outbuf);
@@ 161,6 165,7 @@ use bytes;
let outbuf = memio::dynamic();
let encsz = encode(&outbuf, &inmsg)!;
assert(encsz == 6);
+ assert(inmsg.checksum == 62440);
let msg = memio::buffer(&outbuf);
@@ 56,21 56,19 @@ fn checksum(msg: []u8) u16 = {
let cov: size = len(msg) - 1z;
let s: u32 = 0;
- for (let i = 0z; i < cov; i += 1) {
- s += ((msg[i + 1]: u32) << 8) | msg[i]: u32;
+ for (let i = 0z; i < cov; i += 2) {
+ s += ((msg[i]: u32) << 8) + msg[i + 1]: u32;
};
if (cov & 1 == 0) {
s += msg[cov]: u32;
};
- s = (s >> 16) + (s & 0xffff);
-
- s = s + (s >> 16);
-
- s ^= s: u16;
+ for ((s >> 16) != 0) {
+ s = (s >> 16) + (s & 0xffff);
+ };
- return s: u16;
+ return ~s: u16;
};
// Encodes a [[message]] into the [[io::handle]] provided