Одним приятным свойством CRC является то, что для заданного набора параметров (полином, отражение, начальное состояние и т. Д.) Вы получите постоянное значение при повторном вычислении CRC по исходному набору данных + исходному CRC.Эти константы документированы для общих CRC, но вы можете просто слепо сгенерировать их, используя два разных набора случайных данных, и проверить, что они одинаковы:
implementation 1: crc(rand_data_1 + crc(rand_data_1)) -> constant_1
implementation 2: crc(rand_data_2 + crc(rand_data_2)) -> constant_2
assert constant_1 == constant_2
Вы можете использовать один и тот же метод в реализации, чтобы получить теплыйнечеткое чувство о его правильности.Если ваша реализация работает с произвольными многочленами, вы можете сделать так, чтобы юнит-тест исчерпывающе проверял каждый возможный многочлен, используя этот метод, без необходимости знать, каковы константы.тест, который проверяет результат на основе известных входных данных для патологического случая, когда обе ваши реализации CRC дают неверные результаты, полученные при проверке на постоянную эквивалентность.