### Reading Input Arguments to Tests

This example shows how a test can read input arguments.

    #include <itest.hpp>
    #include <iargdict.hpp>

    //--------------------------------------------------------------------
    class INumberATTest : public ITest {
    public:
                        INumberATTest();
        virtual         ~INumberATTest();

    protected:
        virtual void    setup();
        virtual void    test();

    private:
        long            fTimingCount;
        long            fSampleCount;
    };

    //--------------------------------------------------------------------
    INumberAtTest::INumberAtTest()
    {
        fTimingCount = 5; // Default value
        fSampleCount = 10; // Default value
    }

    INumberAtTest::~INumberAtTest() { }

    void INumberAtTest::test()
    {
        outputTextStream() << "inumberattest timing count="
            << fTimingCount << " , sample count="
            << fSampleCount << '\n';
        SetSuccess(true);
    }

    void INumberAtTest::setup()
    /*
        Setup reads input arguments of the form:

            [-c <timing count>] [-s <sample count>]

        The timing count must be in the range 1..256. The sample count must
        be greater than 5. If the counts are not given, they remain unchanged.
        If a bad input is given, the test fails.
    */
    {
        static const IString kTimingCountKey(" c");
        const long kmintimingcount="1;"
        const long kmaxtimingcount="256;"
        static const istring ksamplecountkey("-s");
        const long kminsamplecount="5;"
        iargumentdictionary args(*this);

        if (!args.numberat(ktimingcountkey, ftimingcount, kmintimingcount, kmaxtimingcount) ||
            !args.numberat(ksamplecountkey, fsamplecount, kminsamplecount)) {

           outputtextstream() << "error parsing input arguments.\n";
           setsuccess(false);
        }
    }