public void ChecksummRoundtip()
        {
            var b = new byte[255];
            var r = new Random();

            r.NextBytes(b);

            var c = new Checksum();

            b[254] = 0;
            c.CalcAndApply(b);

            Assert.IsTrue(c.Check(b, 0, b.Length));
        }
        public void ChecksummDoubleApply()
        {
            var b = new Byte[] { 1, 2, 3, 4, 5 };

            var c = new Checksum();

            try
            {
                c.CalcAndApply(b);
                Assert.Fail("Error expected");
            } catch (ArgumentException) { }

            b[4] = 0;
            c.CalcAndApply(b);
            Assert.AreEqual(246, b[4]);

            try
            {
                c.CalcAndApply(b);
                Assert.Fail("Error expected");
            } catch (ArgumentException) { }

            Assert.IsTrue(c.Check(b, 0, b.Length));
        }