Changeset 456

Show
Ignore:
Timestamp:
07/31/09 08:38:18 (15 years ago)
Author:
vbarta
Message:

custom test location for harness tests (extended UnitTest?++), configurable tolerance - all tests pass (most of the time)

Location:
library/tests
Files:
22 modified

Legend:

Unmodified
Added
Removed
  • library/tests/egamma_test.cpp

    r446 r456  
    11#define BDMLIB // not an ideal way to prevent double registration of UI factories... 
    2 #include "base/bdmbase.h" 
    32#include "base/user_info.h" 
    43#include "stat/exp_family.h" 
    5 #include "itpp_ext.h" 
    64#include "epdf_harness.h" 
    7 #include "mat_checks.h" 
    85#include "UnitTest++.h" 
    96 
     
    1512 
    1613TEST(test_egamma) { 
    17     RV::clear_all(); 
    18     UIFile in("egamma.cfg"); 
    19     Array<epdf_harness *> input; 
    20     UI::get(input, in, "data"); 
    21     int sz = input.size(); 
    22     CHECK(sz > 0); 
    23     for (int i = 0; i < sz; ++i) { 
    24         input(i)->test(); 
    25     } 
     14    epdf_harness::test_config("egamma.cfg"); 
    2615} 
  • library/tests/egiw.cfg

    r454 r456  
    1313  }; 
    1414  mean = [ 1.1, 0.1 ]; 
    15   lognc = 11.45368; 
     15  lognc = 3.39463; 
    1616  variance = [ 0.01, 8e-05 ]; 
    1717  support = ( "matrix", 2, 2, [ -2.0, 4.0, 0.01, 2.0 ] ); 
    1818  nbins = [ 100, 200 ]; 
    1919  integral = 1.0; 
     20  tolerance = 0.2; 
    2021}, 
    2122{ 
  • library/tests/egiw_harness.cpp

    r440 r456  
    44#include "test_util.h" 
    55#include "UnitTest++.h" 
    6  
    7 const double epsilon = 0.00001; 
    8  
    9 namespace UnitTest 
    10 { 
    11  
    12 inline void CheckClose(TestResults &results, const itpp::vec &expected, 
    13                        const itpp::vec &actual, double tolerance, 
    14                        TestDetails const &details) { 
    15     if (!AreClose(expected, actual, tolerance)) {  
    16         MemoryOutStream stream; 
    17         stream << "Expected " << expected << " +/- " << tolerance << " but was " << actual; 
    18  
    19         results.OnTestFailure(details, stream.GetText()); 
    20     } 
    21 } 
    22  
    23 inline void CheckClose(TestResults &results, const itpp::mat &expected, 
    24                        const itpp::mat &actual, double tolerance, 
    25                        TestDetails const &details) { 
    26     if (!AreClose(expected, actual, tolerance)) {  
    27         MemoryOutStream stream; 
    28         stream << "Expected " << expected << " +/- " << tolerance << " but was " << actual; 
    29  
    30         results.OnTestFailure(details, stream.GetText()); 
    31     } 
    32 } 
    33  
    34 } 
    356 
    367namespace bdm { 
     
    4112} 
    4213 
    43 void egiw_harness::test() 
     14void egiw_harness::test(const char *config_name, int idx) 
    4415{ 
    45     epdf_harness::test(); 
     16    epdf_harness::test(config_name, idx); 
     17 
     18    CurrentContext cc(config_name, idx); 
    4619 
    4720    egiw *wide = dynamic_cast<egiw *>(get_epdf()); 
    4821    CHECK(wide); 
    4922 
    50     CHECK_CLOSE(lognc, wide->lognc(), epsilon); 
     23    CHECK_CLOSE_EX(lognc, wide->lognc(), get_tolerance()); 
    5124} 
    5225 
  • library/tests/egiw_harness.h

    r439 r456  
    2727    egiw_harness():lognc(0) { } 
    2828 
    29     void test(); 
     29    void test(const char *config_name, int idx); 
    3030 
    3131    void from_setting(const Setting &set); 
  • library/tests/egiw_test.cpp

    r440 r456  
    1111const double epsilon = 0.00001; 
    1212 
    13 namespace UnitTest 
    14 { 
    15  
    16 inline void CheckClose(TestResults &results, const itpp::vec &expected, 
    17                        const itpp::vec &actual, double tolerance, 
    18                        TestDetails const &details) { 
    19     if (!AreClose(expected, actual, tolerance)) {  
    20         MemoryOutStream stream; 
    21         stream << "Expected " << expected << " +/- " << tolerance << " but was " << actual; 
    22  
    23         results.OnTestFailure(details, stream.GetText()); 
    24     } 
    25 } 
    26  
    27 } 
    28  
    2913using namespace bdm; 
    3014 
     
    3822 
    3923TEST(test_egiw) { 
    40     RV::clear_all(); 
    41     UIFile in("egiw.cfg"); 
    42     Array<epdf_harness *> input; 
    43     UI::get(input, in, "data"); 
    44     int sz = input.size(); 
    45     CHECK(sz > 0); 
    46     for (int i = 0; i < sz; ++i) { 
    47         input(i)->test(); 
    48     } 
     24    epdf_harness::test_config("egiw.cfg"); 
    4925} 
    5026 
  • library/tests/enorm.cfg

    r454 r456  
    2121      names = ( "x" ); 
    2222    }; 
    23  
     23  tolerance = 0.2; 
    2424}, 
    2525{ 
     
    4141  nbins = [ 200, 200 ]; 
    4242  integral = 1.0; 
     43  tolerance = 0.5; 
    4344}, 
    4445{ 
     
    5859  variance = [ 1 ]; 
    5960  R = 1.0; 
     61  tolerance = 0.5; 
    6062}, 
    6163{ 
     
    105107  variance = [ 2.0, 0.5 ]; 
    106108  R = ( "matrix", 2, 2, [ 2.0, 0.0, 0.0, 0.5 ] ); 
     109  tolerance = 0.5; 
    107110} ); 
    108111 
  • library/tests/enorm_test.cpp

    r454 r456  
    22#include "stat/exp_family.h" 
    33#include "epdf_harness.h" 
    4 #include "mat_checks.h" 
    5 #include "test_util.h" 
    64#include "UnitTest++.h" 
    75 
     
    97 
    108const double epsilon = 0.00001; 
    11  
    12 namespace UnitTest 
    13 { 
    14  
    15 inline void CheckClose(TestResults &results, const itpp::vec &expected, 
    16                        const itpp::vec &actual, double tolerance, 
    17                        TestDetails const& details) { 
    18     if (!AreClose(expected, actual, tolerance)) {  
    19         MemoryOutStream stream; 
    20         stream << "Expected " << expected << " +/- " << tolerance << " but was " << actual; 
    21  
    22         results.OnTestFailure(details, stream.GetText()); 
    23     } 
    24 } 
    25  
    26 inline void CheckClose(TestResults &results, const itpp::mat &expected, 
    27                        const itpp::mat &actual, double tolerance, 
    28                        TestDetails const& details) { 
    29     if (!AreClose(expected, actual, tolerance)) {  
    30         MemoryOutStream stream; 
    31         stream << "Expected " << expected << " +/- " << tolerance << " but was " << actual; 
    32  
    33         results.OnTestFailure(details, stream.GetText()); 
    34     } 
    35 } 
    36  
    37 } 
    389 
    3910template<> 
     
    5021 
    5122TEST(test_enorm) { 
    52     RV::clear_all(); 
    53     UIFile in("enorm.cfg"); 
    54     Array<epdf_harness *> input; 
    55     UI::get(input, in, "data"); 
    56     int sz = input.size(); 
    57     CHECK(sz > 0); 
    58     for (int i = 0; i < sz; ++i) { 
    59         input(i)->test(); 
    60     } 
     23    epdf_harness::test_config("enorm.cfg"); 
    6124} 
  • library/tests/epdf_harness.cpp

    r447 r456  
    11#include "epdf_harness.h" 
     2#include "base/bdmbase.h" 
     3#include "base/user_info.h" 
    24#include "stat/exp_family.h" 
    35#include "mat_checks.h" 
    46#include "test_util.h" 
    57#include "UnitTest++.h" 
    6  
    7 const double epsilon = 0.00001; 
    8  
    9 namespace UnitTest 
    10 { 
    11  
    12 inline void CheckClose(TestResults &results, const itpp::vec &expected, 
    13                        const itpp::vec &actual, double tolerance, 
    14                        TestDetails const &details) { 
    15     if (!AreClose(expected, actual, tolerance)) {  
    16         MemoryOutStream stream; 
    17         stream << "Expected " << expected << " +/- " << tolerance << " but was " << actual; 
    18  
    19         results.OnTestFailure(details, stream.GetText()); 
    20     } 
    21 } 
    22  
    23 inline void CheckClose(TestResults &results, const itpp::mat &expected, 
    24                        const itpp::mat &actual, double tolerance, 
    25                        TestDetails const &details) { 
    26     if (!AreClose(expected, actual, tolerance)) {  
    27         MemoryOutStream stream; 
    28         stream << "Expected " << expected << " +/- " << tolerance << " but was " << actual; 
    29  
    30         results.OnTestFailure(details, stream.GetText()); 
    31     } 
    32 } 
    33  
    34 } 
    358 
    369namespace bdm { 
     
    3912const ParticularUI<epdf_harness> &ParticularUI<epdf_harness>::factory( 
    4013    ParticularUI<epdf_harness>("epdf_harness")); 
     14 
     15void epdf_harness::test_config(const char *config_file_name) { 
     16    RV::clear_all(); 
     17 
     18    UIFile in(config_file_name); 
     19    Array<epdf_harness *> input; 
     20    UI::get(input, in, "data"); 
     21    int sz = input.size(); 
     22    CHECK(sz > 0); 
     23    for (int i = 0; i < sz; ++i) { 
     24        input(i)->test(config_file_name, i); 
     25    } 
     26} 
    4127 
    4228void epdf_harness::from_setting(const Setting &set) { 
     
    6450        UI::get(R, set, "R"); 
    6551    } 
     52 
     53    if (set.exists("tolerance")) { 
     54        UI::get(tolerance, set, "tolerance"); 
     55    } 
    6656} 
    6757 
    68 void epdf_harness::test() 
     58void epdf_harness::test(const char *config_name, int idx) 
    6959{ 
    70     CHECK_CLOSE(mean, hepdf->mean(), epsilon); 
    71     CHECK_CLOSE(variance, hepdf->variance(), epsilon); 
     60    CurrentContext cc(config_name, idx); 
     61 
     62    CHECK_CLOSE_EX(mean, hepdf->mean(), tolerance); 
     63    CHECK_CLOSE_EX(variance, hepdf->variance(), tolerance); 
    7264 
    7365    if (support.rows() == 2) { 
     
    8577        } 
    8678 
    87         CHECK_CLOSE(mean, num_mean2(hepdf.get(), xb, yb, nbins(0), nbins(1)), 0.1); 
    88         CHECK_CLOSE(integral, normcoef(hepdf.get(), xb, yb, nbins(0), nbins(1)), 0.1); 
     79        CHECK_CLOSE_EX(mean, num_mean2(hepdf.get(), xb, yb, nbins(0), nbins(1)), 0.1); 
     80        CHECK_CLOSE_EX(integral, normcoef(hepdf.get(), xb, yb, nbins(0), nbins(1)), 0.1); 
    8981    } 
    9082 
     
    9486        vec Emu = smp * ones(n) / n; 
    9587        mat Er = (smp*smp.transpose())/n - outer_product(Emu,Emu); 
    96         CHECK_CLOSE(mean, Emu, 0.1); 
    97         CHECK_CLOSE(R, Er, 0.1); 
     88        CHECK_CLOSE_EX(mean, Emu, tolerance); 
     89        CHECK_CLOSE_EX(R, Er, tolerance); 
    9890    } 
    9991} 
  • library/tests/epdf_harness.h

    r442 r456  
    3636    double integral; 
    3737    mat R; 
     38    double tolerance; 
    3839 
    3940public: 
    40     epdf_harness():nsamples(1000), integral(0) { } 
     41    static void test_config(const char *config_file_name); 
    4142 
    42     virtual void test(); 
     43    epdf_harness():nsamples(1000), integral(0), tolerance(0.1) { } 
     44 
     45    virtual void test(const char *config_name, int idx); 
    4346 
    4447    void from_setting(const Setting &set); 
     
    4649protected: 
    4750    epdf *get_epdf() { return hepdf.get(); } 
     51 
     52    double get_tolerance() const { return tolerance; } 
    4853}; 
    4954 
  • library/tests/mat_checks.cpp

    r428 r456  
    3737 
    3838} 
     39 
     40const char *CurrentContext::config_name = "???"; 
     41 
     42int CurrentContext::index = -1; 
     43 
     44CurrentContext::CurrentContext(const char *name, int idx) 
     45{ 
     46    config_name = name; 
     47    index = idx; 
     48} 
     49 
     50CurrentContext::~CurrentContext() 
     51{ 
     52    config_name = "???"; 
     53    index = -1; 
     54} 
  • library/tests/mat_checks.h

    r428 r456  
    1919namespace UnitTest 
    2020{ 
    21   bool AreClose(const itpp::vec &expected, const itpp::vec &actual, 
    22                 double tolerance); 
    2321 
    24   bool AreClose(const itpp::mat &expected, const itpp::mat &actual, 
    25                 double tolerance); 
     22bool AreClose(const itpp::vec &expected, const itpp::vec &actual, 
     23              double tolerance); 
     24 
     25bool AreClose(const itpp::mat &expected, const itpp::mat &actual, 
     26              double tolerance); 
     27 
     28inline void CheckClose(TestResults &results, const itpp::vec &expected, 
     29                       const itpp::vec &actual, double tolerance, 
     30                       TestDetails const &details) { 
     31    if (!AreClose(expected, actual, tolerance)) {  
     32        MemoryOutStream stream; 
     33        stream << "Expected " << expected << " +/- " << tolerance << " but was " << actual; 
     34 
     35        results.OnTestFailure(details, stream.GetText()); 
     36    } 
    2637} 
    2738 
     39inline void CheckClose(TestResults &results, const itpp::mat &expected, 
     40                       const itpp::mat &actual, double tolerance, 
     41                       TestDetails const &details) { 
     42    if (!AreClose(expected, actual, tolerance)) {  
     43        MemoryOutStream stream; 
     44        stream << "Expected " << expected << " +/- " << tolerance << " but was " << actual; 
     45 
     46        results.OnTestFailure(details, stream.GetText()); 
     47    } 
     48} 
     49 
     50} 
     51 
     52/*! CHECK_CLOSE_EX macro should be used only in blocks having an 
     53  instance of this class (which sets the globals for error 
     54  reporting). */ 
     55class CurrentContext 
     56{ 
     57private: 
     58    static const char *config_name; 
     59    static int index; 
     60 
     61public: 
     62    // the pointer must stay valid for the lifetime of the object 
     63    CurrentContext(const char *name, int idx); 
     64    ~CurrentContext(); 
     65 
     66    template< typename Expected, typename Actual, typename Tolerance > 
     67    static void CheckCloseEx(UnitTest::TestResults& results, 
     68                             Expected const& expected, 
     69                             Actual const& actual, 
     70                             Tolerance const& tolerance, 
     71                             UnitTest::TestDetails const& details) { 
     72        if (!UnitTest::AreClose(expected, actual, tolerance)) {  
     73            UnitTest::MemoryOutStream stream; 
     74            stream << "error at " << config_name << '[' << index << "]: expected " << expected << " +/- " << tolerance << " but was " << actual; 
     75 
     76            results.OnTestFailure(details, stream.GetText()); 
     77        } 
     78    } 
     79}; 
     80 
     81#define CHECK_CLOSE_EX(expected, actual, tolerance) \ 
     82    do \ 
     83    { \ 
     84        try { \ 
     85            CurrentContext::CheckCloseEx(*UnitTest::CurrentTest::Results(), expected, actual, tolerance, UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), 0, false)); \ 
     86        } \ 
     87        catch (...) { \ 
     88            UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \ 
     89                    "Unhandled exception in CHECK_CLOSE(" #expected ", " #actual ")"); \ 
     90        } \ 
     91    } while (0) 
     92 
    2893#endif 
  • library/tests/mepdf.cfg

    r454 r456  
    1818  mean = [ 1.1, -1.0 ]; 
    1919  R = ( "matrix", 2, 2, [ 1.0, -0.5, -0.5, 2.0 ] ); 
     20  tolerance = 0.3; 
    2021} ); 
    2122 
  • library/tests/mepdf_test.cpp

    r448 r456  
    1313const double epsilon = 0.00001; 
    1414 
    15 namespace UnitTest 
    16 { 
    17  
    18 inline void CheckClose(TestResults &results, const itpp::vec &expected, 
    19                        const itpp::vec &actual, double tolerance, 
    20                        TestDetails const& details) { 
    21     if (!AreClose(expected, actual, tolerance)) {  
    22         MemoryOutStream stream; 
    23         stream << "Expected " << expected << " +/- " << tolerance << " but was " << actual; 
    24  
    25         results.OnTestFailure(details, stream.GetText()); 
    26     } 
    27 } 
    28  
    29 inline void CheckClose(TestResults &results, const itpp::mat &expected, 
    30                        const itpp::mat &actual, double tolerance, 
    31                        TestDetails const& details) { 
    32     if (!AreClose(expected, actual, tolerance)) {  
    33         MemoryOutStream stream; 
    34         stream << "Expected " << expected << " +/- " << tolerance << " but was " << actual; 
    35  
    36         results.OnTestFailure(details, stream.GetText()); 
    37     } 
    38 } 
    39  
    40 } 
    41  
    4215TEST(test_mepdf) { 
    43     RV::clear_all(); 
    44     UIFile in("mepdf.cfg"); 
    45     Array<mpdf_harness *> input; 
    46     UI::get(input, in, "data"); 
    47     int sz = input.size(); 
    48     CHECK(sz > 0); 
    49     for (int i = 0; i < sz; ++i) { 
    50         input(i)->test(); 
    51     } 
     16    mpdf_harness::test_config("mepdf.cfg"); 
    5217} 
    5318 
  • library/tests/mgamma.cfg

    r454 r456  
    2020  mean = [ 1.5, 1.7 ]; 
    2121  R = ( "matrix", 2, 2, [ 2.25, 0.0, 0.0, 2.89 ] ); 
     22  tolerance = 0.5; 
    2223} ); 
    2324 
  • library/tests/mgamma_test.cpp

    r447 r456  
    1515 
    1616TEST(test_mgamma) { 
    17     RV::clear_all(); 
    18     UIFile in("mgamma.cfg"); 
    19     Array<mpdf_harness *> input; 
    20     UI::get(input, in, "data"); 
    21     int sz = input.size(); 
    22     CHECK(sz > 0); 
    23     for (int i = 0; i < sz; ++i) { 
    24         input(i)->test(); 
    25     } 
     17    mpdf_harness::test_config("mgamma.cfg"); 
    2618} 
  • library/tests/mpdf_harness.cpp

    r447 r456  
    11#include "mpdf_harness.h" 
     2#include "base/bdmbase.h" 
     3#include "base/user_info.h" 
    24#include "stat/exp_family.h" 
    35#include "mat_checks.h" 
    46#include "test_util.h" 
    57#include "UnitTest++.h" 
    6  
    7 const double epsilon = 0.00001; 
    8  
    9 namespace UnitTest 
    10 { 
    11  
    12 inline void CheckClose(TestResults &results, const itpp::vec &expected, 
    13                        const itpp::vec &actual, double tolerance, 
    14                        TestDetails const &details) { 
    15     if (!AreClose(expected, actual, tolerance)) {  
    16         MemoryOutStream stream; 
    17         stream << "Expected " << expected << " +/- " << tolerance << " but was " << actual; 
    18  
    19         results.OnTestFailure(details, stream.GetText()); 
    20     } 
    21 } 
    22  
    23 inline void CheckClose(TestResults &results, const itpp::mat &expected, 
    24                        const itpp::mat &actual, double tolerance, 
    25                        TestDetails const &details) { 
    26     if (!AreClose(expected, actual, tolerance)) {  
    27         MemoryOutStream stream; 
    28         stream << "Expected " << expected << " +/- " << tolerance << " but was " << actual; 
    29  
    30         results.OnTestFailure(details, stream.GetText()); 
    31     } 
    32 } 
    33  
    34 } 
    358 
    369namespace bdm { 
     
    3912const ParticularUI<mpdf_harness> &ParticularUI<mpdf_harness>::factory( 
    4013    ParticularUI<mpdf_harness>("mpdf_harness")); 
     14 
     15void mpdf_harness::test_config(const char *config_file_name) { 
     16    RV::clear_all(); 
     17 
     18    UIFile in(config_file_name); 
     19    Array<mpdf_harness *> input; 
     20    UI::get(input, in, "data"); 
     21    int sz = input.size(); 
     22    CHECK(sz > 0); 
     23    for (int i = 0; i < sz; ++i) { 
     24        input(i)->test(config_file_name, i); 
     25    } 
     26} 
    4127 
    4228void mpdf_harness::from_setting(const Setting &set) { 
     
    5036 
    5137    UI::get(R, set, "R"); 
     38 
     39    if (set.exists("tolerance")) { 
     40        UI::get(tolerance, set, "tolerance"); 
     41    } 
    5242} 
    5343 
    54 void mpdf_harness::test() 
     44void mpdf_harness::test(const char *config_name, int idx) 
    5545{ 
     46    CurrentContext cc(config_name, idx); 
     47 
    5648    mat smp = hmpdf->samplecond_m(cond, nsamples); 
    5749    int n = smp.cols(); 
    58     vec Emu = smp * ones(n) / n; 
    59     mat Er = (smp*smp.transpose())/n - outer_product(Emu,Emu); 
    60     CHECK_CLOSE(mean, Emu, 0.1); 
    61     CHECK_CLOSE(R, Er, 0.1); 
     50    vec emu = smp * ones(n) / n; 
     51    mat er = (smp * smp.T()) / n - outer_product(emu, emu); 
     52    CHECK_CLOSE_EX(mean, emu, tolerance); 
     53    CHECK_CLOSE_EX(R, er, tolerance); 
    6254} 
    6355 
  • library/tests/mpdf_harness.h

    r447 r456  
    3333    int nsamples; 
    3434    mat R; 
     35    double tolerance; 
    3536 
    3637public:     
    37     mpdf_harness():nsamples(1000) { } 
     38    static void test_config(const char *config_file_name); 
    3839 
    39     virtual void test(); 
     40    mpdf_harness():nsamples(1000), tolerance(0.1) { } 
     41 
     42    virtual void test(const char *config_name, int idx); 
    4043 
    4144    void from_setting(const Setting &set); 
  • library/tests/square_mat_stress.cpp

    r438 r456  
    11#include "../bdm/math/square_mat.h" 
    22#include "../bdm/math/chmat.h" 
    3 #include "mat_checks.h" 
    43#include "UnitTest++.h" 
    54#include "TestReporterStdout.h" 
     
    1918namespace UnitTest 
    2019{ 
     20 
     21// can't include mat_checks.h because CheckClose is different in this file 
     22extern bool AreClose(const itpp::vec &expected, const itpp::vec &actual, 
     23                     double tolerance); 
     24 
     25extern bool AreClose(const itpp::mat &expected, const itpp::mat &actual, 
     26                     double tolerance); 
    2127 
    2228void CheckClose(TestResults &results, const itpp::mat &expected, 
  • library/tests/square_mat_test.cpp

    r455 r456  
    66 
    77const double epsilon = 0.00001; 
    8  
    9 bool fast = false; 
    10  
    11 namespace UnitTest 
    12 { 
    13  
    14 inline void CheckClose(TestResults &results, const itpp::mat &expected, 
    15                        const itpp::mat &actual, double tolerance, 
    16                        TestDetails const& details) { 
    17     if (!AreClose(expected, actual, tolerance)) {  
    18         MemoryOutStream stream; 
    19         stream << "Expected " << expected << " +/- " << tolerance << " but was " << actual; 
    20  
    21         results.OnTestFailure(details, stream.GetText()); 
    22     } 
    23 } 
    24  
    25 } 
    268 
    279template<typename TMatrix> 
  • library/tests/unittest-cpp/TestDetails.cpp

    r418 r456  
    33namespace UnitTest { 
    44 
    5 TestDetails::TestDetails(char const* testName_, char const* suiteName_, char const* filename_, int lineNumber_) 
     5TestDetails::TestDetails(char const* testName_, char const* suiteName_, char const* filename_, int lineNumber_, bool useFilename_) 
    66    : suiteName(suiteName_) 
    77    , testName(testName_) 
    88    , filename(filename_) 
    99    , lineNumber(lineNumber_) 
     10    , useFilename(useFilename_) 
    1011{ 
    1112} 
    1213 
    13 TestDetails::TestDetails(const TestDetails& details, int lineNumber_) 
     14TestDetails::TestDetails(const TestDetails& details, int lineNumber_, bool useFilename_) 
    1415    : suiteName(details.suiteName) 
    1516    , testName(details.testName) 
    1617    , filename(details.filename) 
    1718    , lineNumber(lineNumber_) 
     19    , useFilename(useFilename_) 
    1820{ 
    1921} 
  • library/tests/unittest-cpp/TestDetails.h

    r418 r456  
    77{ 
    88public: 
    9     TestDetails(char const* testName, char const* suiteName, char const* filename, int lineNumber); 
    10     TestDetails(const TestDetails& details, int lineNumber); 
     9    TestDetails(char const* testName, char const* suiteName, char const* filename, int lineNumber, bool useFilename = true); 
     10    TestDetails(const TestDetails& details, int lineNumber, bool useFilename = true); 
    1111 
    1212    char const* const suiteName; 
     
    1414    char const* const filename; 
    1515    int const lineNumber; 
     16    bool const useFilename; 
    1617 
    1718    TestDetails(TestDetails const&); // Why is it public? --> http://gcc.gnu.org/bugs.html#cxx_rvalbind 
  • library/tests/unittest-cpp/TestReporterStdout.cpp

    r418 r456  
    1919#endif 
    2020 
    21         using namespace std; 
    22     printf(errorFormat, details.filename, details.lineNumber, details.testName, failure); 
     21    using namespace std; 
     22 
     23    if (details.useFilename) { 
     24        // standard way 
     25        printf(errorFormat, details.filename, details.lineNumber, details.testName, failure); 
     26    } else {  
     27        // extended for BDM - the failure string already includes 
     28        // (custom) test location info 
     29        printf("%s\n", failure); 
     30    } 
    2331} 
    2432