static void v27terputbit(void *user_data, int bit) { if (bit < 0) { /* Special conditions */ switch (bit) { case PUTBIT_TRAINING_FAILED: printf("Training failed\n"); break; case PUTBIT_TRAINING_SUCCEEDED: printf("Training succeeded\n"); break; case PUTBIT_CARRIER_UP: printf("Carrier up\n"); break; case PUTBIT_CARRIER_DOWN: printf("Carrier down\n"); break; default: printf("Eh!\n"); break; } return; } if (decode_test_file) printf("Rx bit %d - %d\n", rx_bits++, bit); else bert_put_bit(&bert, bit); }
static void v27terputbit(void *user_data, int bit) { if (bit < 0) { v27ter_rx_status(user_data, bit); return; } if (decode_test_file) printf("Rx bit %d - %d\n", rx_bits++, bit); else bert_put_bit(&bert, bit); }
static void v29putbit(void *user_data, int bit) { v29_rx_state_t *rx; if (bit < 0) { v29_rx_status(user_data, bit); return; } rx = (v29_rx_state_t *) user_data; if (decode_test_file) printf("Rx bit %d - %d\n", rx_bits++, bit); else bert_put_bit(&bert, bit); }
static void v22bis_putbit(void *user_data, int bit) { endpoint_t *s; if (bit < 0) { v22bis_rx_status(user_data, bit); return; } s = (endpoint_t *) user_data; if (decode_test_file) printf("Rx bit %p-%d - %d\n", user_data, rx_bits++, bit); else bert_put_bit(&s->bert_rx, bit); }
int main(int argc, char *argv[]) { bert_state_t tx_bert; bert_state_t rx_bert; bert_state_t bert; bert_results_t bert_results; int i; int bit; int zeros; int max_zeros; int failed; bert_init(&tx_bert, 0, BERT_PATTERN_ZEROS, 300, 20); bert_init(&rx_bert, 0, BERT_PATTERN_ZEROS, 300, 20); for (i = 0; i < 511*2; i++) { bit = bert_get_bit(&tx_bert); bert_put_bit(&rx_bert, bit); } bert_result(&rx_bert, &bert_results); printf("Zeros: Bad bits %d/%d\n", bert_results.bad_bits, bert_results.total_bits); if (bert_results.bad_bits || bert_results.total_bits != 950) { printf("Test failed.\n"); exit(2); } bert_init(&tx_bert, 0, BERT_PATTERN_ONES, 300, 20); bert_init(&rx_bert, 0, BERT_PATTERN_ONES, 300, 20); for (i = 0; i < 511*2; i++) { bit = bert_get_bit(&tx_bert); bert_put_bit(&rx_bert, bit); } bert_result(&rx_bert, &bert_results); printf("Ones: Bad bits %d/%d\n", bert_results.bad_bits, bert_results.total_bits); if (bert_results.bad_bits || bert_results.total_bits != 950) { printf("Test failed.\n"); exit(2); } bert_init(&tx_bert, 0, BERT_PATTERN_1_TO_7, 300, 20); bert_init(&rx_bert, 0, BERT_PATTERN_1_TO_7, 300, 20); for (i = 0; i < 511*2; i++) { bit = bert_get_bit(&tx_bert); bert_put_bit(&rx_bert, bit); } bert_result(&rx_bert, &bert_results); printf("1 to 7: Bad bits %d/%d\n", bert_results.bad_bits, bert_results.total_bits); if (bert_results.bad_bits || bert_results.total_bits != 950) { printf("Test failed.\n"); exit(2); } bert_init(&tx_bert, 0, BERT_PATTERN_1_TO_3, 300, 20); bert_init(&rx_bert, 0, BERT_PATTERN_1_TO_3, 300, 20); for (i = 0; i < 511*2; i++) { bit = bert_get_bit(&tx_bert); bert_put_bit(&rx_bert, bit); } bert_result(&rx_bert, &bert_results); printf("1 to 3: Bad bits %d/%d\n", bert_results.bad_bits, bert_results.total_bits); if (bert_results.bad_bits || bert_results.total_bits != 950) { printf("Test failed.\n"); exit(2); } bert_init(&tx_bert, 0, BERT_PATTERN_1_TO_1, 300, 20); bert_init(&rx_bert, 0, BERT_PATTERN_1_TO_1, 300, 20); for (i = 0; i < 511*2; i++) { bit = bert_get_bit(&tx_bert); bert_put_bit(&rx_bert, bit); } bert_result(&rx_bert, &bert_results); printf("1 to 1: Bad bits %d/%d\n", bert_results.bad_bits, bert_results.total_bits); if (bert_results.bad_bits || bert_results.total_bits != 950) { printf("Test failed.\n"); exit(2); } bert_init(&tx_bert, 0, BERT_PATTERN_3_TO_1, 300, 20); bert_init(&rx_bert, 0, BERT_PATTERN_3_TO_1, 300, 20); for (i = 0; i < 511*2; i++) { bit = bert_get_bit(&tx_bert); bert_put_bit(&rx_bert, bit); } bert_result(&rx_bert, &bert_results); printf("3 to 1: Bad bits %d/%d\n", bert_results.bad_bits, bert_results.total_bits); if (bert_results.bad_bits || bert_results.total_bits != 950) { printf("Test failed.\n"); exit(2); } bert_init(&tx_bert, 0, BERT_PATTERN_7_TO_1, 300, 20); bert_init(&rx_bert, 0, BERT_PATTERN_7_TO_1, 300, 20); for (i = 0; i < 511*2; i++) { bit = bert_get_bit(&tx_bert); bert_put_bit(&rx_bert, bit); } bert_result(&rx_bert, &bert_results); printf("7 to 1: Bad bits %d/%d\n", bert_results.bad_bits, bert_results.total_bits); if (bert_results.bad_bits || bert_results.total_bits != 950) { printf("Test failed.\n"); exit(2); } bert_init(&tx_bert, 0, BERT_PATTERN_ITU_O153_9, 300, 20); bert_init(&rx_bert, 0, BERT_PATTERN_ITU_O153_9, 300, 20); for (i = 0; i < 0x200; i++) test[i] = 0; max_zeros = 0; zeros = 0; for (i = 0; i < 511*2; i++) { bit = bert_get_bit(&tx_bert); if (bit) { if (zeros > max_zeros) max_zeros = zeros; zeros = 0; } else { zeros++; } bert_put_bit(&rx_bert, bit); test[tx_bert.tx_reg]++; } failed = FALSE; if (test[0] != 0) { printf("XXX %d %d\n", 0, test[0]); failed = TRUE; } for (i = 1; i < 0x200; i++) { if (test[i] != 2) { printf("XXX %d %d\n", i, test[i]); failed = TRUE; } } bert_result(&rx_bert, &bert_results); printf("O.153(9): Bad bits %d/%d, max zeros %d\n", bert_results.bad_bits, bert_results.total_bits, max_zeros); if (bert_results.bad_bits || bert_results.total_bits != 986 || failed) { printf("Test failed.\n"); exit(2); } bert_init(&tx_bert, 0, BERT_PATTERN_ITU_O152_11, 300, 20); bert_init(&rx_bert, 0, BERT_PATTERN_ITU_O152_11, 300, 20); for (i = 0; i < 0x800; i++) test[i] = 0; max_zeros = 0; zeros = 0; for (i = 0; i < 2047*2; i++) { bit = bert_get_bit(&tx_bert); if (bit) { if (zeros > max_zeros) max_zeros = zeros; zeros = 0; } else { zeros++; } bert_put_bit(&rx_bert, bit); test[tx_bert.tx_reg]++; } failed = FALSE; if (test[0] != 0) { printf("XXX %d %d\n", 0, test[0]); failed = TRUE; } for (i = 1; i < 0x800; i++) { if (test[i] != 2) { printf("XXX %d %d\n", i, test[i]); failed = TRUE; } } bert_result(&rx_bert, &bert_results); printf("O.152(11): Bad bits %d/%d, max zeros %d\n", bert_results.bad_bits, bert_results.total_bits, max_zeros); if (bert_results.bad_bits || bert_results.total_bits != 4052 || failed) { printf("Test failed.\n"); exit(2); } bert_init(&tx_bert, 0, BERT_PATTERN_ITU_O151_15, 300, 20); bert_init(&rx_bert, 0, BERT_PATTERN_ITU_O151_15, 300, 20); for (i = 0; i < 0x8000; i++) test[i] = 0; max_zeros = 0; zeros = 0; for (i = 0; i < 32767*2; i++) { bit = bert_get_bit(&tx_bert); if (bit) { if (zeros > max_zeros) max_zeros = zeros; zeros = 0; } else { zeros++; } bert_put_bit(&rx_bert, bit); test[tx_bert.tx_reg]++; } failed = FALSE; if (test[0] != 0) { printf("XXX %d %d\n", 0, test[0]); failed = TRUE; } for (i = 1; i < 0x8000; i++) { if (test[i] != 2) { printf("XXX %d %d\n", i, test[i]); failed = TRUE; } } bert_result(&rx_bert, &bert_results); printf("O.151(15): Bad bits %d/%d, max zeros %d\n", bert_results.bad_bits, bert_results.total_bits, max_zeros); if (bert_results.bad_bits || bert_results.total_bits != 65480 || failed) { printf("Test failed.\n"); exit(2); } bert_init(&tx_bert, 0, BERT_PATTERN_ITU_O151_20, 300, 20); bert_init(&rx_bert, 0, BERT_PATTERN_ITU_O151_20, 300, 20); for (i = 0; i < 0x100000; i++) test[i] = 0; max_zeros = 0; zeros = 0; for (i = 0; i < 1048575*2; i++) { bit = bert_get_bit(&tx_bert); if (bit) { if (zeros > max_zeros) max_zeros = zeros; zeros = 0; } else { zeros++; } bert_put_bit(&rx_bert, bit); test[tx_bert.tx_reg]++; } failed = FALSE; if (test[0] != 0) { printf("XXX %d %d\n", 0, test[0]); failed = TRUE; } for (i = 1; i < 0x100000; i++) { if (test[i] != 2) printf("XXX %d %d\n", i, test[i]); } bert_result(&rx_bert, &bert_results); printf("O.151(20): Bad bits %d/%d, max zeros %d\n", bert_results.bad_bits, bert_results.total_bits, max_zeros); if (bert_results.bad_bits || bert_results.total_bits != 2097066 || failed) { printf("Test failed.\n"); exit(2); } bert_init(&tx_bert, 0, BERT_PATTERN_ITU_O151_23, 300, 20); bert_init(&rx_bert, 0, BERT_PATTERN_ITU_O151_23, 300, 20); for (i = 0; i < 0x800000; i++) test[i] = 0; max_zeros = 0; zeros = 0; for (i = 0; i < 8388607*2; i++) { bit = bert_get_bit(&tx_bert); if (bit) { if (zeros > max_zeros) max_zeros = zeros; zeros = 0; } else { zeros++; } bert_put_bit(&rx_bert, bit); test[tx_bert.tx_reg]++; } failed = FALSE; if (test[0] != 0) { printf("XXX %d %d\n", 0, test[0]); failed = TRUE; } for (i = 1; i < 0x800000; i++) { if (test[i] != 2) printf("XXX %d %d\n", i, test[i]); } bert_result(&rx_bert, &bert_results); printf("O.151(23): Bad bits %d/%d, max zeros %d\n", bert_results.bad_bits, bert_results.total_bits, max_zeros); if (bert_results.bad_bits || bert_results.total_bits != 16777136 || failed) { printf("Test failed.\n"); exit(2); } bert_init(&tx_bert, 0, BERT_PATTERN_QBF, 300, 20); bert_init(&rx_bert, 0, BERT_PATTERN_QBF, 300, 20); for (i = 0; i < 100000; i++) { bit = bert_get_bit(&tx_bert); bert_put_bit(&rx_bert, bit); } bert_result(&rx_bert, &bert_results); printf("QBF: Bad bits %d/%d\n", bert_results.bad_bits, bert_results.total_bits); if (bert_results.bad_bits || bert_results.total_bits != 100000) { printf("Test failed.\n"); exit(2); } /* Test the mechanism for categorising the error rate into <10^x bands */ /* TODO: The result of this test is not checked automatically */ bert_init(&bert, 15000000, BERT_PATTERN_ITU_O152_11, 300, 20); bert_set_report(&bert, 100000, reporter, (intptr_t) 0); for (;;) { if ((bit = bert_get_bit(&bert)) == PUTBIT_END_OF_DATA) { bert_result(&bert, &bert_results); printf("Rate test: %d bits, %d bad bits, %d resyncs\n", bert_results.total_bits, bert_results.bad_bits, bert_results.resyncs); if (bert_results.total_bits != 15000000 - 42 || bert_results.bad_bits != 58 || bert_results.resyncs != 0) { printf("Tests failed\n"); exit(2); } break; //bert_init(&bert, 15000000, BERT_PATTERN_ITU_O152_11, 300, 20); //bert_set_report(&bert, 100000, reporter, (intptr_t) 0); //continue; } if ((my_rand() & 0x3FFFF) == 0) bit ^= 1; //if ((my_rand() & 0xFFF) == 0) // bert_put_bit(&bert, bit); bert_put_bit(&bert, bit); } printf("Tests passed.\n"); return 0; }