1 #include "golay_24_12.h"
2 #include <stdio.h>
3 #include <unistd.h>
4 #include <stdint.h>
5 
6 uint32_t correct_code = 0b000000000000000000000000;
7 
evaluate(uint32_t error_pattern)8 void evaluate(uint32_t error_pattern) {
9     uint32_t erroneous_code = correct_code ^ error_pattern;
10     uint32_t parity = golay_24_12_parity(&erroneous_code);
11     fprintf(stderr, "{ %i, %i },", parity, error_pattern);
12     if (!golay_24_12(&erroneous_code)) {
13         fprintf(stderr, " // incorrectable");
14     } else if (erroneous_code != correct_code) {
15         fprintf(stderr, " // incorrect result");
16     }
17     fprintf(stderr, "\n");
18 }
19 
main()20 int main() {
21     // up to 3 bit errors can be corrected reliably
22     for (int i = 0; i < 24; i++) {
23         evaluate( 1 << i );
24 
25         for (int k = 0; k < i; k++) {
26             evaluate( ( 1 << i ) ^ ( 1 << k ) );
27 
28             for (int l = 0; l < k; l++) {
29                 evaluate( ( 1 << i ) ^ ( 1 << k ) ^ ( 1 << l ) );
30             }
31         }
32     }
33 
34 }