diff --git a/tests/mls_test.cc b/tests/mls_test.cc new file mode 100644 index 0000000..cbdbcba --- /dev/null +++ b/tests/mls_test.cc @@ -0,0 +1,509 @@ +/* +Test for the Maximum length sequence + +Copyright 2020 Ahmet Inan +*/ + +#include +#include +#include "mls.hh" + +static const int poly[] = { + 0b111, + 0b1011, + 0b1101, + 0b10011, + 0b11001, + 0b100101, + 0b101001, + 0b101111, + 0b110111, + 0b111011, + 0b111101, + 0b1000011, + 0b1011011, + 0b1100001, + 0b1100111, + 0b1101101, + 0b1110011, + 0b10000011, + 0b10001001, + 0b10001111, + 0b10010001, + 0b10011101, + 0b10100111, + 0b10101011, + 0b10111001, + 0b10111111, + 0b11000001, + 0b11001011, + 0b11010011, + 0b11010101, + 0b11100101, + 0b11101111, + 0b11110001, + 0b11110111, + 0b11111101, + 0b100011101, + 0b100101011, + 0b100101101, + 0b101001101, + 0b101011111, + 0b101100011, + 0b101100101, + 0b101101001, + 0b101110001, + 0b110000111, + 0b110001101, + 0b110101001, + 0b111000011, + 0b111001111, + 0b111100111, + 0b111110101, + 0b1000010001, + 0b1000011011, + 0b1000100001, + 0b1000101101, + 0b1000110011, + 0b1001011001, + 0b1001011111, + 0b1001101001, + 0b1001101111, + 0b1001110111, + 0b1001111101, + 0b1010000111, + 0b1010010101, + 0b1010100011, + 0b1010100101, + 0b1010101111, + 0b1010110111, + 0b1010111101, + 0b1011001111, + 0b1011010001, + 0b1011011011, + 0b1011110101, + 0b1011111001, + 0b1100010011, + 0b1100010101, + 0b1100011111, + 0b1100100011, + 0b1100110001, + 0b1100111011, + 0b1101001111, + 0b1101011011, + 0b1101100001, + 0b1101101011, + 0b1101101101, + 0b1101110011, + 0b1101111111, + 0b1110000101, + 0b1110001111, + 0b1110110101, + 0b1110111001, + 0b1111000111, + 0b1111001011, + 0b1111001101, + 0b1111010101, + 0b1111011001, + 0b1111100011, + 0b1111101001, + 0b1111111011, + 0b10000001001, + 0b10000011011, + 0b10000100111, + 0b10000101101, + 0b10001100101, + 0b10001101111, + 0b10010000001, + 0b10010001011, + 0b10011000101, + 0b10011010111, + 0b10011100111, + 0b10011110011, + 0b10011111111, + 0b10100001101, + 0b10100011001, + 0b10100100011, + 0b10100110001, + 0b10100111101, + 0b10101000011, + 0b10101010111, + 0b10101101011, + 0b10110000101, + 0b10110001111, + 0b10110010111, + 0b10110100001, + 0b10111000111, + 0b10111100101, + 0b10111110111, + 0b10111111011, + 0b11000010011, + 0b11000010101, + 0b11000100101, + 0b11000110111, + 0b11001000011, + 0b11001001111, + 0b11001011011, + 0b11001111001, + 0b11001111111, + 0b11010001001, + 0b11010110101, + 0b11011000001, + 0b11011010011, + 0b11011011111, + 0b11011111101, + 0b11100010111, + 0b11100011101, + 0b11100100001, + 0b11100111001, + 0b11101000111, + 0b11101001101, + 0b11101010101, + 0b11101011001, + 0b11101100011, + 0b11101111101, + 0b11110001101, + 0b11110010011, + 0b11110110001, + 0b11111011011, + 0b11111110011, + 0b11111111001, + 0b100000000101, + 0b100000010111, + 0b100000101011, + 0b100000101101, + 0b100001000111, + 0b100001100011, + 0b100001100101, + 0b100001110001, + 0b100001111011, + 0b100010001101, + 0b100010010101, + 0b100010011111, + 0b100010101001, + 0b100010110001, + 0b100011001111, + 0b100011010001, + 0b100011100001, + 0b100011100111, + 0b100011101011, + 0b100011110101, + 0b100100001101, + 0b100100010011, + 0b100100100101, + 0b100100101001, + 0b100100111011, + 0b100100111101, + 0b100101000101, + 0b100101001001, + 0b100101010001, + 0b100101011011, + 0b100101110011, + 0b100101110101, + 0b100101111111, + 0b100110000011, + 0b100110001111, + 0b100110101011, + 0b100110101101, + 0b100110111001, + 0b100111000111, + 0b100111011001, + 0b100111100101, + 0b100111110111, + 0b101000000001, + 0b101000000111, + 0b101000010011, + 0b101000010101, + 0b101000101001, + 0b101001001001, + 0b101001100001, + 0b101001101101, + 0b101001111001, + 0b101001111111, + 0b101010000101, + 0b101010010001, + 0b101010011101, + 0b101010100111, + 0b101010101011, + 0b101010110011, + 0b101010110101, + 0b101011010101, + 0b101011011111, + 0b101011101001, + 0b101011101111, + 0b101011110001, + 0b101011111011, + 0b101100000011, + 0b101100001001, + 0b101100010001, + 0b101100110011, + 0b101100111111, + 0b101101000001, + 0b101101001011, + 0b101101011001, + 0b101101011111, + 0b101101100101, + 0b101101101111, + 0b101101111101, + 0b101110000111, + 0b101110001011, + 0b101110010011, + 0b101110010101, + 0b101110101111, + 0b101110110111, + 0b101110111101, + 0b101111001001, + 0b101111011011, + 0b101111011101, + 0b101111100111, + 0b101111101101, + 0b110000001011, + 0b110000001101, + 0b110000011001, + 0b110000011111, + 0b110001010111, + 0b110001100001, + 0b110001101011, + 0b110001110011, + 0b110010000101, + 0b110010001001, + 0b110010010111, + 0b110010011011, + 0b110010011101, + 0b110010110011, + 0b110010111111, + 0b110011000111, + 0b110011001101, + 0b110011010011, + 0b110011010101, + 0b110011100011, + 0b110011101001, + 0b110011110111, + 0b110100000011, + 0b110100001111, + 0b110100011101, + 0b110100100111, + 0b110100101101, + 0b110101000001, + 0b110101000111, + 0b110101010101, + 0b110101011001, + 0b110101100011, + 0b110101101111, + 0b110101110001, + 0b110110010011, + 0b110110011111, + 0b110110101001, + 0b110110111011, + 0b110110111101, + 0b110111001001, + 0b110111010111, + 0b110111011011, + 0b110111100001, + 0b110111100111, + 0b110111110101, + 0b111000000101, + 0b111000011101, + 0b111000100001, + 0b111000100111, + 0b111000101011, + 0b111000110011, + 0b111000111001, + 0b111001000111, + 0b111001001011, + 0b111001010101, + 0b111001011111, + 0b111001110001, + 0b111001111011, + 0b111001111101, + 0b111010000001, + 0b111010010011, + 0b111010011111, + 0b111010100011, + 0b111010111011, + 0b111011001111, + 0b111011011101, + 0b111011110011, + 0b111011111001, + 0b111100001011, + 0b111100011001, + 0b111100110001, + 0b111100110111, + 0b111101011101, + 0b111101101011, + 0b111101101101, + 0b111101110101, + 0b111110000011, + 0b111110010001, + 0b111110010111, + 0b111110011011, + 0b111110100111, + 0b111110101101, + 0b111110110101, + 0b111111001101, + 0b111111010011, + 0b111111100101, + 0b111111101001, + 0b1000001010011, + 0b1000001101001, + 0b1000001111011, + 0b1000001111101, + 0b1000010011001, + 0b1000011010001, + 0b1000011101011, + 0b1000100000111, + 0b1000100011111, + 0b1000100100011, + 0b1000100111011, + 0b1000101001111, + 0b1000101010111, + 0b1000101100001, + 0b1000101101011, + 0b1000110000101, + 0b1000110110011, + 0b1000111011001, + 0b1000111011111, + 0b1001000001101, + 0b1001000110111, + 0b1001000111101, + 0b1001001100111, + 0b1001001110011, + 0b1001001111111, + 0b1001010111001, + 0b1001011000001, + 0b1001011001011, + 0b1001100001111, + 0b1001100011101, + 0b1001100100001, + 0b1001100111001, + 0b1001100111111, + 0b1001101001101, + 0b1001101110001, + 0b1001110011001, + 0b1001110100011, + 0b1001110101001, + 0b1010000000111, + 0b1010000110001, + 0b1010000110111, + 0b1010001001111, + 0b1010001011101, + 0b1010001100111, + 0b1010001110101, + 0b1010010100111, + 0b1010010101101, + 0b1010011010011, + 0b1010100001111, + 0b1010100011101, + 0b1010101001101, + 0b1010110010011, + 0b1010111000101, + 0b1010111010111, + 0b1010111011101, + 0b1010111101011, + 0b1011000001001, + 0b1011001000111, + 0b1011001010101, + 0b1011001011001, + 0b1011010100101, + 0b1011010111101, + 0b1011100010101, + 0b1011100011001, + 0b1011101000011, + 0b1011101000101, + 0b1011101110101, + 0b1011110001001, + 0b1011110101101, + 0b1011110110011, + 0b1011110111111, + 0b1011111000001, + 0b1100001010111, + 0b1100001011101, + 0b1100010010001, + 0b1100010010111, + 0b1100010111001, + 0b1100011101111, + 0b1100100011011, + 0b1100100110101, + 0b1100101000001, + 0b1100101100101, + 0b1100101111011, + 0b1100110001011, + 0b1100110110001, + 0b1100110111101, + 0b1100111001001, + 0b1100111001111, + 0b1100111100111, + 0b1101000011011, + 0b1101000101011, + 0b1101000110011, + 0b1101001101001, + 0b1101010001011, + 0b1101011010001, + 0b1101011100001, + 0b1101011110101, + 0b1101100001011, + 0b1101100010011, + 0b1101100011111, + 0b1101101010111, + 0b1101110010001, + 0b1101110100111, + 0b1101110111111, + 0b1101111000001, + 0b1101111010011, + 0b1110000000101, + 0b1110000010001, + 0b1110000010111, + 0b1110000100111, + 0b1110001001101, + 0b1110010000111, + 0b1110010011111, + 0b1110010100101, + 0b1110010111011, + 0b1110011000101, + 0b1110011001001, + 0b1110011001111, + 0b1110011110011, + 0b1110100000111, + 0b1110100100011, + 0b1110101000011, + 0b1110101010001, + 0b1110101011011, + 0b1110101110101, + 0b1110110000101, + 0b1110110001001, + 0b1111000010101, + 0b1111000011001, + 0b1111000101111, + 0b1111001000101, + 0b1111001010001, + 0b1111001100111, + 0b1111001110011, + 0b1111010001111, + 0b1111011100011, + 0b1111100010001, + 0b1111100011011, + 0b1111100100111, + 0b1111101110001, + 0b1111110011001, + 0b1111110111011, + 0b1111110111101, + 0b1111111001001, +}; + +int main() +{ + const int num = sizeof(poly) / sizeof(*poly); + int pos = 0; + for (int i = 0b101; i <= 0b1111111111111; ++i) { + CODE::MLS seq(i); + if (seq.bad()) + continue; + assert(pos < num); + assert(poly[pos] == i); + ++pos; + } + assert(pos == num); + std::cerr << "Maximum length sequence test passed!" << std::endl; + return 0; +} +