void check() { BOOST_CONCEPT_ASSERT((boost::ForwardRangeConcept<T>)); BOOST_CONCEPT_ASSERT((boost_concepts::ReadableIteratorConcept<typename boost::range_iterator<T>::type>)); BOOST_CONCEPT_ASSERT((boost_concepts::RandomAccessTraversalConcept<typename boost::range_iterator<T>::type>)); #ifndef BOOST_NO_CXX11_RANGE_BASED_FOR const T val; for(auto item : val) { use_val(item); } #endif }
void testTimingZeroClamp() { // test performance const long iters(400000); T use_val(0); T val = T(0); CPPUNIT_METRIC_START_TIMING(); for (long iter = 0; iter < iters; ++iter) { val += T(0.5); use_val += gmtl::Math::zeroClamp( val, T(0.4) ); use_val += gmtl::Math::zeroClamp( val, T(0.2) ); } CPPUNIT_METRIC_STOP_TIMING(); std::string typeName = std::string("MathTest/ZeroClamp[") + std::string(typeid(T).name()) + std::string("]"); CPPUNIT_ASSERT_METRIC_TIMING_LE(typeName, iters, 0.075f, 0.1f); // warn at 7.5%, error at 10% // make sure the compiler doesn't optimize out use_val CPPUNIT_ASSERT( use_val > 0 ); }