public static bool UnitTest(int seed)
        {
            Random random = new Random(seed);
            int    n      = 891;

            ulong[] a  = new ulong[n];
            ulong[] b  = new ulong[n];
            ulong[] s1 = new ulong[n + 1];
            ulong[] s2 = new ulong[n + 1];
            ulong[] r1 = new ulong[n * 2];
            ulong[] r2 = new ulong[n * 2];
            for (int i = n; --i >= 0;)
            {
                byte[] data = new byte[16];
                random.NextBytes(data);
                a[i] = BitConverter.ToUInt64(data, 0);
                b[i] = BitConverter.ToUInt64(data, 8);
            }
            bool ok = true;

            s1[n] = AsmX64Operations.CarrylessMultipyAndXor(a, b[0], s1, n);
            s2[n] = carrylessMultiplyAndXor(a, b[0], s2, n);
            for (int i = 0; i <= n; i++)
            {
                if (s1[i] != s2[i])
                {
                    ok = false;
                }
            }

            AsmX64Operations.CarrylessMultiplication(a, b, r1, n);
            carrylessMultiplication(a, b, r2, n);
            for (int i = 0; i < n * 2; i++)
            {
                if (r1[i] != r2[i])
                {
                    ok = false;
                }
            }

            return(ok);
        }