// Copyright (C) 2011  Davis E. King (davis@dlib.net)
// License: Boost Software License   See LICENSE.txt for the full license.


#include <sstream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <dlib/crc32.h>

#include "tester.h"

namespace  
{

    using namespace test;
    using namespace dlib;
    using namespace std;

    logger dlog("test.crc32");


    class crc32_tester : public tester
    {
    public:
        crc32_tester (
        ) :
            tester ("test_crc32",
                    "Runs tests on the crc32 component.")
        {}

        void perform_test (
        )
        {
            DLIB_TEST(crc32("davis").get_checksum() == 0x0445527C);

            crc32 c, c2;
            DLIB_TEST(c.get_checksum() == 0);
            c.add("davis");
            DLIB_TEST(c.get_checksum() == 0x0445527C);
            DLIB_TEST(c2.get_checksum() == 0);
            c2 = c;
            DLIB_TEST(c2.get_checksum() == 0x0445527C);
            crc32 c3(c);
            DLIB_TEST(c3.get_checksum() == 0x0445527C);
            c.add('a');
            c2.add('a');
            c3.add('a');
            DLIB_TEST(c.get_checksum() == 0xB100C606);
            DLIB_TEST(c2.get_checksum() == 0xB100C606);
            DLIB_TEST(c3.get_checksum() == 0xB100C606);


            crc32::kernel_1a cold;
            DLIB_TEST(cold.get_checksum() == 0);
            cold.add("davis");
            DLIB_TEST(cold.get_checksum() == 0x0445527C);

            c.clear();
            DLIB_TEST(c.get_checksum() == 0);
            c.add("davis");
            DLIB_TEST(c.get_checksum() == 0x0445527C);

            std::vector<char> buf;
            for (int i = 0; i < 4000; ++i)
                buf.push_back(i);
            DLIB_TEST(crc32(buf) == 492662731);
        }
    } a;

}