Sam Russell wrote: > is there anymore feedback on this? + char plaintext[] = "Gnulib crc testsGnulib crc tests" + "Gnulib crc testsGnulib crc tests" + "Gnulib crc testsGnulib crc tests" + "Gnulib crc testsGnulib crc tests" + "Gnulib crc testsGnulib crc tests";
ASCII uses only 7 out of 8 bits. I.e. this input has bit 7 set to zero everywhere. It would be better to use the randomb[] array as input, that is now part of the 'crc-tests' module. + char data[sizeof(plaintext) + sizeof(unsigned long int)]; Please put a space between a function-like identifier and an opening parenthesis (GNU Coding Style). + for (i = 0; i < sizeof(unsigned long int); i++) sizeof(unsigned long int) = 8 does not reflect the maximum possible alignment. Already nowadays, for some things the alignment is 16. For being future-proof, better use 32: for (i = 0; i < 32; i++) + memcpy(data + i, plaintext, sizeof(plaintext)); It would be good to make sure that the contents of data[] beyond the first i + sizeof(plaintext) bytes is not used. To this effect, store a couple of random bytes after the data[i + sizeof(plaintext) - 1]. Also, one of the proposed algorithms will dissect the input into three pieces: 1. a few unaligned bytes at the beginning, 2. a block of aligned words, 3. a few extra bytes at the end. It will be useful to have a test where the number of bytes in part 1 and in part 3 are independent. So, write a double loop for (i = 0; i < 32; i++) for (k = 0; k < 32; k++) process (i + 32 * j + k bytes, aligned at 32-i mod 32) Additionally, the case where the input is so short that part 1, 2, 3 are all together is worth testing separately, so: for (n = 0; n < 32; n++) for (i = 0; i < 32; i++) process (n bytes, aligned at i mod 32) Bruno