Changeset 927


Ignore:
Timestamp:
Sep 8, 2011, 2:17:00 PM (8 years ago)
Author:
sam
Message:

lolunit: add a LOLUNIT_SET_CONTEXT / LOLUNIT_UNSET_CONTEXT macro pair.

This is useful when doing several asserts in one loop, for instance: there
isn't always a way to deduce the loop index from the assert failure, so
these macros allow the user to give more context information.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/lol/unit.h

    r925 r927  
    1818
    1919#include <iostream>
     20#include <iomanip>
    2021#include <sstream>
    2122#include <cstdio>
     
    6465    int m_asserts, m_failure;
    6566    char const *m_fixturename, *m_currentname;
    66     std::stringstream m_errorlog;
     67    std::stringstream m_errorlog, m_context;
    6768};
    6869
     
    106107            m_failure = false;
    107108            m_currentname = c->m_testname;
     109            m_context.str("");
    108110            (static_cast<FixtureClass *>(this)->*c->m_fun)();
    109111            std::cout << (m_failure ? 'F' : '.');
     
    227229                       << __FILE__ << std::endl; \
    228230            m_errorlog << "equality assertion failed" << std::endl; \
    229             m_errorlog << "- Expected: " << (a) << std::endl; \
    230             m_errorlog << "- Actual  : " << (b) << std::endl; \
     231            m_errorlog << "- Expected: " << #a << " = " << (a) << std::endl; \
     232            m_errorlog << "- Actual  : " << #b << " = " << (b) << std::endl; \
    231233            m_errorlog << message; \
     234            m_errorlog << m_context.str(); \
    232235            m_failure = true; \
    233236            return; \
     
    246249                       << __FILE__ << std::endl; \
    247250            m_errorlog << "double equality assertion failed" << std::endl; \
    248             m_errorlog << "- Expected: " << (a) << std::endl; \
    249             m_errorlog << "- Actual  : " << (b) << std::endl; \
    250             m_errorlog << "- Delta   : " << (t) << std::endl; \
     251            std::streamsize old_prec = m_errorlog.precision(); \
     252            m_errorlog << std::setprecision(16); \
     253            m_errorlog << "- Expected: " << #a << " = " << (a) << std::endl; \
     254            m_errorlog << "- Actual  : " << #b << " = " << (b) << std::endl; \
     255            m_errorlog << "- Delta   : " << #t << " = " << (t) << std::endl; \
     256            m_errorlog << std::setprecision(old_prec); \
    251257            m_errorlog << message; \
     258            m_errorlog << m_context.str(); \
    252259            m_failure = true; \
    253260            return; \
     
    265272        m_errorlog << "forced failure" << std::endl; \
    266273        m_errorlog << "- " << message << std::endl; \
     274        m_errorlog << m_context.str(); \
    267275        m_failure = true; \
    268276        return; \
    269277    } while(!True())
    270278
     279#define LOLUNIT_SET_CONTEXT(n) \
     280    do { \
     281        m_context.str(""); \
     282        m_context << "- Context : " << #n << " = " << (n) << std::endl; \
     283    } while(!True())
     284
     285#define LOLUNIT_UNSET_CONTEXT(n) \
     286    m_context.str("")
     287
    271288#define LOLUNIT_ASSERT(cond) \
    272289    LOLUNIT_ASSERT_GENERIC("", cond)
  • trunk/test/half.cpp

    r914 r927  
    4646            half a = (half)pairs[i].f;
    4747            uint16_t b = pairs[i].x;
     48            LOLUNIT_SET_CONTEXT(i);
    4849            LOLUNIT_ASSERT_EQUAL(a.bits, b);
    4950        }
     
    5657            half a = half::makeaccurate(pairs[i].f);
    5758            uint16_t b = pairs[i].x;
     59            LOLUNIT_SET_CONTEXT(i);
    5860            LOLUNIT_ASSERT_EQUAL(a.bits, b);
    5961        }
     
    6668            half a = half::makebits(i);
    6769            uint16_t b = i;
     70            LOLUNIT_SET_CONTEXT(i);
    6871            LOLUNIT_ASSERT_EQUAL(a.bits, b);
    6972        }
     
    141144        for (uint32_t i = 0; i < 0x10000; i++)
    142145        {
     146            LOLUNIT_SET_CONTEXT(i);
    143147            half h = half::makebits(i);
    144148            if (h.is_nan())
     
    166170            float a = (float)half::makebits(pairs[i].x);
    167171            float b = pairs[i].f;
     172            LOLUNIT_SET_CONTEXT(i);
    168173            LOLUNIT_ASSERT_EQUAL(a, b);
    169174        }
     
    174179            float f = (float)h;
    175180            half g = (half)f;
     181            LOLUNIT_SET_CONTEXT(i);
    176182            if (h.is_nan())
    177183            {
     
    302308    { 15.9375f,  0x4bf8 },
    303309    { 31.0f / (1 << 14), 0x17c0 }, /* 0x1.fp-10 */
    304     { 31.0f / (1 << 18), 0x07c0 }, /* 0x1.fp-14, denormal */
    305     { 31.0f / (1 << 19), 0x03e0 }, /* 0x1.fp-15, denormal */
     310    { 31.0f / (1 << 18), 0x07c0 }, /* 0x1.fp-14, normal float, denormal half */
     311    { 31.0f / (1 << 19), 0x03e0 }, /* 0x1.fp-15, normal float, denormal half */
    306312};
    307313
  • trunk/test/trig.cpp

    r914 r927  
    3838#endif
    3939            double b = lol_sin(f);
     40            LOLUNIT_SET_CONTEXT(f);
    4041            LOLUNIT_ASSERT_DOUBLES_EQUAL(a, b, fabs(f) * 1e-11);
    4142        }
     
    5051#endif
    5152            double b = lol_sin(f);
     53            LOLUNIT_SET_CONTEXT(f);
    5254            LOLUNIT_ASSERT_DOUBLES_EQUAL(a, b, fabs(f) * 1e-11);
    5355        }
     
    6567#endif
    6668            double b = lol_cos(f);
     69            LOLUNIT_SET_CONTEXT(f);
    6770            LOLUNIT_ASSERT_DOUBLES_EQUAL(a, b, fabs(f) * 1e-11);
    6871        }
     
    7780#endif
    7881            double b = lol_cos(f);
     82            LOLUNIT_SET_CONTEXT(f);
    7983            LOLUNIT_ASSERT_DOUBLES_EQUAL(a, b, fabs(f) * 1e-11);
    8084        }
     
    9599            double b1, b2;
    96100            lol_sincos(f, &b1, &b2);
     101            LOLUNIT_SET_CONTEXT(f);
    97102            LOLUNIT_ASSERT_DOUBLES_EQUAL(a1, b1, fabs(f) * 1e-11);
    98103            LOLUNIT_ASSERT_DOUBLES_EQUAL(a2, b2, fabs(f) * 1e-11);
     
    111116            double b1, b2;
    112117            lol_sincos(f, &b1, &b2);
     118            LOLUNIT_SET_CONTEXT(f);
    113119            LOLUNIT_ASSERT_DOUBLES_EQUAL(a1, b1, fabs(f) * 1e-11);
    114120            LOLUNIT_ASSERT_DOUBLES_EQUAL(a2, b2, fabs(f) * 1e-11);
     
    127133#endif
    128134            double b = lol_tan(f);
     135            LOLUNIT_SET_CONTEXT(f);
    129136            if (fabs(a) > 1e4)
    130137                LOLUNIT_ASSERT_DOUBLES_EQUAL(a, b, fabs(a) * fabs(a) * 1e-11);
     
    144151#endif
    145152            double b = lol_tan(f);
     153            LOLUNIT_SET_CONTEXT(f);
    146154            if (fabs(a) > 1e4)
    147155                LOLUNIT_ASSERT_DOUBLES_EQUAL(a, b, fabs(a) * fabs(a) * 1e-11);
Note: See TracChangeset for help on using the changeset viewer.