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

    #include "tester.h"

    // This is called an unnamed-namespace and it has the effect of making everything
    // inside this file "private" so that everything you declare will have static linkage.
    // Thus we won't have any multiply defined symbol errors coming out of the linker when
    // we try to compile the test suite.
    namespace
    {
        // Declare the logger we will use in this test.  The name of the logger
        // should start with "test."
        dlib::logger dlog("test.example_args");

        using namespace test;

        class example_args_tester : public tester
        {
            /*!
                WHAT THIS OBJECT REPRESENTS
                    This object represents a unit test.  When it is constructed
                    it adds itself into the testing framework.

                    This particular test requires the user to supply a command line
                    argument when they run it.
            !*/
        public:
            example_args_tester (
            ) :
                tester (
                    "test_example_args",                // the command line argument name for this test
                    "Run example tests with argument.", // the command line argument description
                    1                                   // the number of command line arguments for this test
                )
            {}

            void perform_test (
                const std::string& arg
            )
            {
                // This message gets logged to the file debug.txt if the user has enabled logging by
                // supplying the -d option on the command line (and they haven't set the logging level
                // to something higher than LINFO).
                dlog << dlib::LINFO << "some message you want to log";
                dlog << dlib::LINFO << "the argument passed to this test was " << arg;

                // This test is considered a success if this function doesn't throw an exception.
                // So we can use the DLIB_TEST_MSG macro to perform our tests since it throws an
                // exception containing a message if its first argument is false.

                // make sure 3 is bigger than 2
                DLIB_TEST_MSG(3 > 2,"This message prints if your compiler doesn't know 3 is bigger than 2");

                // make sure 5 is not equal to 9
                DLIB_TEST_MSG(5 != 9,"This message prints if your compiler thinks 5 is the same as 9");

                // If your test takes a long time to run you can also call print_spinner()
                // periodically.  This will cause a spinning / character to display on the
                // console to indicate to the user that your test is still running (rather
                // than hung)
                print_spinner();
            }

        };

        // Create an instance of this object.  Doing this causes this test
        // to be automatically inserted into the testing framework whenever this cpp file
        // is linked into the project.  Note that since we are inside an unnamed-namespace
        // we won't get any linker errors about the symbol a being defined multiple times.
        example_args_tester a;
    }