Ticket #4246: value_init_lightweight_test.patch
File value_init_lightweight_test.patch, 8.2 KB (added by , 12 years ago) |
---|
-
libs/utility/value_init_test.cpp
22 22 #pragma hdrstop 23 23 #endif 24 24 25 #include "boost/test/minimal.hpp"25 #include <boost/detail/lightweight_test.hpp> 26 26 27 27 // 28 28 // Sample POD type … … 215 215 void check_initialized_value ( T const& y ) 216 216 { 217 217 T initializedValue = boost::initialized_value ; 218 BOOST_ CHECK( y == initializedValue ) ;218 BOOST_TEST ( y == initializedValue ) ; 219 219 } 220 220 221 221 #ifdef __BORLANDC__ … … 245 245 template<class T> 246 246 bool test ( T const& y, T const& z ) 247 247 { 248 const boost::unit_test::counter_t counter_before_test = boost::minimal_test::errors_counter();248 const int errors_before_test = boost::detail::test_errors(); 249 249 250 250 check_initialized_value(y); 251 251 252 252 boost::value_initialized<T> x ; 253 BOOST_ CHECK( y == x ) ;254 BOOST_ CHECK( y == boost::get(x) ) ;253 BOOST_TEST ( y == x ) ; 254 BOOST_TEST ( y == boost::get(x) ) ; 255 255 256 256 static_cast<T&>(x) = z ; 257 257 boost::get(x) = z ; 258 BOOST_ CHECK( x == z ) ;258 BOOST_TEST ( x == z ) ; 259 259 260 260 boost::value_initialized<T> const x_c ; 261 BOOST_ CHECK( y == x_c ) ;262 BOOST_ CHECK( y == boost::get(x_c) ) ;261 BOOST_TEST ( y == x_c ) ; 262 BOOST_TEST ( y == boost::get(x_c) ) ; 263 263 T& x_c_ref = const_cast<T&>( boost::get(x_c) ) ; 264 264 x_c_ref = z ; 265 BOOST_ CHECK( x_c == z ) ;265 BOOST_TEST ( x_c == z ) ; 266 266 267 267 boost::value_initialized<T> const copy1 = x; 268 BOOST_ CHECK( boost::get(copy1) == boost::get(x) ) ;268 BOOST_TEST ( boost::get(copy1) == boost::get(x) ) ; 269 269 270 270 boost::value_initialized<T> copy2; 271 271 copy2 = x; 272 BOOST_ CHECK( boost::get(copy2) == boost::get(x) ) ;272 BOOST_TEST ( boost::get(copy2) == boost::get(x) ) ; 273 273 274 274 boost::shared_ptr<boost::value_initialized<T> > ptr( new boost::value_initialized<T> ); 275 BOOST_ CHECK( y == *ptr ) ;275 BOOST_TEST ( y == *ptr ) ; 276 276 277 277 #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) 278 278 boost::value_initialized<T const> cx ; 279 BOOST_ CHECK( y == cx ) ;280 BOOST_ CHECK( y == boost::get(cx) ) ;279 BOOST_TEST ( y == cx ) ; 280 BOOST_TEST ( y == boost::get(cx) ) ; 281 281 282 282 boost::value_initialized<T const> const cx_c ; 283 BOOST_ CHECK( y == cx_c ) ;284 BOOST_ CHECK( y == boost::get(cx_c) ) ;283 BOOST_TEST ( y == cx_c ) ; 284 BOOST_TEST ( y == boost::get(cx_c) ) ; 285 285 #endif 286 286 287 return boost:: minimal_test::errors_counter() == counter_before_test ;287 return boost::detail::test_errors() == errors_before_test ; 288 288 } 289 289 290 int test_main(int, char **)290 int main(int, char **) 291 291 { 292 BOOST_ CHECK( test( 0,1234 ) ) ;293 BOOST_ CHECK( test( 0.0,12.34 ) ) ;294 BOOST_ CHECK( test( POD(0,0,0.0), POD('a',1234,56.78f) ) ) ;295 BOOST_ CHECK( test( NonPOD( std::string() ), NonPOD( std::string("something") ) ) ) ;292 BOOST_TEST ( test( 0,1234 ) ) ; 293 BOOST_TEST ( test( 0.0,12.34 ) ) ; 294 BOOST_TEST ( test( POD(0,0,0.0), POD('a',1234,56.78f) ) ) ; 295 BOOST_TEST ( test( NonPOD( std::string() ), NonPOD( std::string("something") ) ) ) ; 296 296 297 297 NonPOD NonPOD_object( std::string("NonPOD_object") ); 298 BOOST_ CHECK( test<NonPOD *>( 0, &NonPOD_object ) ) ;298 BOOST_TEST ( test<NonPOD *>( 0, &NonPOD_object ) ) ; 299 299 300 300 AggregatePODStruct zeroInitializedAggregatePODStruct = { 0.0f, '\0', 0 }; 301 301 AggregatePODStruct nonZeroInitializedAggregatePODStruct = { 1.25f, 'a', -1 }; 302 BOOST_ CHECK( test(zeroInitializedAggregatePODStruct, nonZeroInitializedAggregatePODStruct) );302 BOOST_TEST ( test(zeroInitializedAggregatePODStruct, nonZeroInitializedAggregatePODStruct) ); 303 303 304 304 StringAndInt stringAndInt0; 305 305 StringAndInt stringAndInt1; 306 306 stringAndInt0.i = 0; 307 307 stringAndInt1.i = 1; 308 308 stringAndInt1.s = std::string("1"); 309 BOOST_ CHECK( test(stringAndInt0, stringAndInt1) );309 BOOST_TEST ( test(stringAndInt0, stringAndInt1) ); 310 310 311 311 StructWithDestructor structWithDestructor0; 312 312 StructWithDestructor structWithDestructor1; 313 313 structWithDestructor0.i = 0; 314 314 structWithDestructor1.i = 1; 315 BOOST_ CHECK( test(structWithDestructor0, structWithDestructor1) );315 BOOST_TEST ( test(structWithDestructor0, structWithDestructor1) ); 316 316 317 317 StructWithVirtualFunction structWithVirtualFunction0; 318 318 StructWithVirtualFunction structWithVirtualFunction1; 319 319 structWithVirtualFunction0.i = 0; 320 320 structWithVirtualFunction1.i = 1; 321 BOOST_ CHECK( test(structWithVirtualFunction0, structWithVirtualFunction1) );321 BOOST_TEST ( test(structWithVirtualFunction0, structWithVirtualFunction1) ); 322 322 323 323 DerivedFromAggregatePODStruct derivedFromAggregatePODStruct0; 324 324 DerivedFromAggregatePODStruct derivedFromAggregatePODStruct1; 325 325 static_cast<AggregatePODStruct &>(derivedFromAggregatePODStruct0) = zeroInitializedAggregatePODStruct; 326 326 static_cast<AggregatePODStruct &>(derivedFromAggregatePODStruct1) = nonZeroInitializedAggregatePODStruct; 327 BOOST_ CHECK( test(derivedFromAggregatePODStruct0, derivedFromAggregatePODStruct1) );327 BOOST_TEST ( test(derivedFromAggregatePODStruct0, derivedFromAggregatePODStruct1) ); 328 328 329 329 AggregatePODStructWrapper aggregatePODStructWrapper0; 330 330 AggregatePODStructWrapper aggregatePODStructWrapper1; 331 331 aggregatePODStructWrapper0.dataMember = zeroInitializedAggregatePODStruct; 332 332 aggregatePODStructWrapper1.dataMember = nonZeroInitializedAggregatePODStruct; 333 BOOST_ CHECK( test(aggregatePODStructWrapper0, aggregatePODStructWrapper1) );333 BOOST_TEST ( test(aggregatePODStructWrapper0, aggregatePODStructWrapper1) ); 334 334 335 335 ArrayOfBytes zeroInitializedArrayOfBytes = { 0 }; 336 336 boost::value_initialized<ArrayOfBytes> valueInitializedArrayOfBytes; 337 BOOST_ CHECK(std::memcmp(get(valueInitializedArrayOfBytes), zeroInitializedArrayOfBytes, sizeof(ArrayOfBytes)) == 0);337 BOOST_TEST (std::memcmp(get(valueInitializedArrayOfBytes), zeroInitializedArrayOfBytes, sizeof(ArrayOfBytes)) == 0); 338 338 339 339 boost::value_initialized<ArrayOfBytes> valueInitializedArrayOfBytes2; 340 340 valueInitializedArrayOfBytes2 = valueInitializedArrayOfBytes; 341 BOOST_ CHECK(std::memcmp(get(valueInitializedArrayOfBytes), get(valueInitializedArrayOfBytes2), sizeof(ArrayOfBytes)) == 0);341 BOOST_TEST (std::memcmp(get(valueInitializedArrayOfBytes), get(valueInitializedArrayOfBytes2), sizeof(ArrayOfBytes)) == 0); 342 342 343 343 boost::value_initialized<CopyFunctionCallTester> copyFunctionCallTester1; 344 BOOST_ CHECK( ! get(copyFunctionCallTester1).is_copy_constructed);345 BOOST_ CHECK( ! get(copyFunctionCallTester1).is_assignment_called);344 BOOST_TEST ( ! get(copyFunctionCallTester1).is_copy_constructed); 345 BOOST_TEST ( ! get(copyFunctionCallTester1).is_assignment_called); 346 346 347 347 boost::value_initialized<CopyFunctionCallTester> copyFunctionCallTester2 = boost::value_initialized<CopyFunctionCallTester>(copyFunctionCallTester1); 348 BOOST_ CHECK( get(copyFunctionCallTester2).is_copy_constructed);349 BOOST_ CHECK( ! get(copyFunctionCallTester2).is_assignment_called);348 BOOST_TEST ( get(copyFunctionCallTester2).is_copy_constructed); 349 BOOST_TEST ( ! get(copyFunctionCallTester2).is_assignment_called); 350 350 351 351 boost::value_initialized<CopyFunctionCallTester> copyFunctionCallTester3; 352 352 copyFunctionCallTester3 = boost::value_initialized<CopyFunctionCallTester>(copyFunctionCallTester1); 353 BOOST_ CHECK( ! get(copyFunctionCallTester3).is_copy_constructed);354 BOOST_ CHECK( get(copyFunctionCallTester3).is_assignment_called);353 BOOST_TEST ( ! get(copyFunctionCallTester3).is_copy_constructed); 354 BOOST_TEST ( get(copyFunctionCallTester3).is_assignment_called); 355 355 356 356 boost::value_initialized<SwapFunctionCallTester> swapFunctionCallTester1; 357 357 boost::value_initialized<SwapFunctionCallTester> swapFunctionCallTester2; 358 358 get(swapFunctionCallTester1).data = 1; 359 359 get(swapFunctionCallTester2).data = 2; 360 360 boost::swap(swapFunctionCallTester1, swapFunctionCallTester2); 361 BOOST_ CHECK( get(swapFunctionCallTester1).data == 2 );362 BOOST_ CHECK( get(swapFunctionCallTester2).data == 1 );363 BOOST_ CHECK( get(swapFunctionCallTester1).is_custom_swap_called );364 BOOST_ CHECK( get(swapFunctionCallTester2).is_custom_swap_called );361 BOOST_TEST( get(swapFunctionCallTester1).data == 2 ); 362 BOOST_TEST( get(swapFunctionCallTester2).data == 1 ); 363 BOOST_TEST( get(swapFunctionCallTester1).is_custom_swap_called ); 364 BOOST_TEST( get(swapFunctionCallTester2).is_custom_swap_called ); 365 365 366 return 0;366 return boost::report_errors(); 367 367 } 368 368 369 369 370 unsigned int expected_failures = 0;371 372