AnalogTapeModel

Physical modelling signal processing for analog tape recording
Log | Files | Refs | Submodules | README | LICENSE

UnitTests.cpp (2185B)


      1 #include "UnitTests.h"
      2 
      3 //==============================================================================
      4 class ConsoleLogger : public Logger
      5 {
      6     void logMessage (const String& message) override
      7     {
      8         std::cout << message << std::endl;
      9 
     10 #if JUCE_WINDOWS
     11         Logger::outputDebugString (message);
     12 #endif
     13     }
     14 };
     15 
     16 //==============================================================================
     17 class ConsoleUnitTestRunner : public UnitTestRunner
     18 {
     19     void logMessage (const String& message) override
     20     {
     21         Logger::writeToLog (message);
     22     }
     23 };
     24 
     25 //==============================================================================
     26 UnitTests::UnitTests()
     27 {
     28     this->commandOption = "--unit-tests";
     29     this->argumentDescription = "--unit-tests [--seed=RANDOM_SEED --all] TEST1 TEST2 ...";
     30     this->shortDescription = "Runs unit tests for ChowTapeModel";
     31     this->longDescription = "";
     32     this->command = std::bind (&UnitTests::runUnitTests, this, std::placeholders::_1);
     33 }
     34 
     35 void UnitTests::runUnitTests (const ArgumentList& args)
     36 {
     37     ConsoleLogger logger;
     38     Logger::setCurrentLogger (&logger);
     39 
     40     ConsoleUnitTestRunner runner;
     41     auto seed = getRandomSeed (args);
     42 
     43     auto tests = getTestsForArgs (args);
     44     runner.runTests (tests, seed);
     45 
     46     Logger::setCurrentLogger (nullptr);
     47 
     48     for (int i = 0; i < runner.getNumResults(); ++i)
     49         if (runner.getResult (i)->failures > 0)
     50             ConsoleApplication::fail ("Unit Tests failed!");
     51 }
     52 
     53 int64 UnitTests::getRandomSeed (const ArgumentList& args)
     54 {
     55     if (args.containsOption ("--seed"))
     56     {
     57         auto seedValueString = args.getValueForOption ("--seed");
     58         if (seedValueString.startsWith ("0x"))
     59             return seedValueString.getHexValue64();
     60 
     61         return seedValueString.getLargeIntValue();
     62     }
     63 
     64     return int64 (0);
     65 }
     66 
     67 Array<UnitTest*> UnitTests::getTestsForArgs (const ArgumentList& args)
     68 {
     69     if (args.containsOption ("--all"))
     70         return UnitTest::getAllTests();
     71 
     72     Array<UnitTest*> unitTests;
     73 
     74     for (auto* test : UnitTest::getAllTests())
     75     {
     76         if (args.containsOption (test->getName()))
     77             unitTests.add (test);
     78     }
     79 
     80     return unitTests;
     81 }