@@ -277,116 +277,136 @@ struct get_real_stored_allocator<flat_multimap<Key, T, Compare, Allocator> >
277277bool test_heterogeneous_lookups ()
278278{
279279 BOOST_CONTAINER_STATIC_ASSERT ((dtl::is_transparent<less_transparent>::value));
280- BOOST_CONTAINER_STATIC_ASSERT (!(dtl::is_transparent<std::less<int > >::value));
281- typedef flat_map<int , char , less_transparent> map_t ;
282- typedef flat_multimap<int , char , less_transparent> mmap_t ;
283- typedef map_t ::value_type value_type;
284-
285- map_t map1;
286- mmap_t mmap1;
287-
288- const map_t &cmap1 = map1;
289- const mmap_t &cmmap1 = mmap1;
290-
291- if (!map1.insert_or_assign (1 , ' a' ).second )
292- return false ;
293- if ( map1.insert_or_assign (1 , ' b' ).second )
294- return false ;
295- if (!map1.insert_or_assign (2 , ' c' ).second )
296- return false ;
297- if ( map1.insert_or_assign (2 , ' d' ).second )
298- return false ;
299- if (!map1.insert_or_assign (3 , ' e' ).second )
300- return false ;
301-
302- if (map1.insert_or_assign (1 , ' a' ).second )
303- return false ;
304- if (map1.insert_or_assign (1 , ' b' ).second )
305- return false ;
306- if (map1.insert_or_assign (2 , ' c' ).second )
307- return false ;
308- if (map1.insert_or_assign (2 , ' d' ).second )
309- return false ;
310- if (map1.insert_or_assign (3 , ' e' ).second )
311- return false ;
312-
313- mmap1.insert (value_type (1 , ' a' ));
314- mmap1.insert (value_type (1 , ' b' ));
315- mmap1.insert (value_type (2 , ' c' ));
316- mmap1.insert (value_type (2 , ' d' ));
317- mmap1.insert (value_type (3 , ' e' ));
318-
319- const test::non_copymovable_int find_me (2 );
320-
321- // find
322- if (map1.find (find_me)->second != ' d' )
323- return false ;
324- if (cmap1.find (find_me)->second != ' d' )
325- return false ;
326- if (mmap1.find (find_me)->second != ' c' )
327- return false ;
328- if (cmmap1.find (find_me)->second != ' c' )
329- return false ;
330-
331- // count
332- if (map1.count (find_me) != 1 )
333- return false ;
334- if (cmap1.count (find_me) != 1 )
335- return false ;
336- if (mmap1.count (find_me) != 2 )
337- return false ;
338- if (cmmap1.count (find_me) != 2 )
339- return false ;
340-
341- // contains
342- if (!map1.contains (find_me))
343- return false ;
344- if (!cmap1.contains (find_me))
345- return false ;
346- if (!mmap1.contains (find_me))
347- return false ;
348- if (!cmmap1.contains (find_me))
349- return false ;
350-
351- // lower_bound
352- if (map1.lower_bound (find_me)->second != ' d' )
353- return false ;
354- if (cmap1.lower_bound (find_me)->second != ' d' )
355- return false ;
356- if (mmap1.lower_bound (find_me)->second != ' c' )
357- return false ;
358- if (cmmap1.lower_bound (find_me)->second != ' c' )
359- return false ;
360-
361- // upper_bound
362- if (map1.upper_bound (find_me)->second != ' e' )
363- return false ;
364- if (cmap1.upper_bound (find_me)->second != ' e' )
365- return false ;
366- if (mmap1.upper_bound (find_me)->second != ' e' )
367- return false ;
368- if (cmmap1.upper_bound (find_me)->second != ' e' )
369- return false ;
370-
371- // equal_range
372- if (map1.equal_range (find_me).first ->second != ' d' )
373- return false ;
374- if (cmap1.equal_range (find_me).second ->second != ' e' )
375- return false ;
376- if (mmap1.equal_range (find_me).first ->second != ' c' )
377- return false ;
378- if (cmmap1.equal_range (find_me).second ->second != ' e' )
379- return false ;
280+ {
281+ typedef flat_map<int , char , less_transparent> map_t ;
282+ typedef flat_multimap<int , char , less_transparent> mmap_t ;
283+ typedef map_t ::value_type value_type;
284+
285+ map_t map1;
286+ mmap_t mmap1;
287+
288+ const map_t &cmap1 = map1;
289+ const mmap_t &cmmap1 = mmap1;
290+
291+ if (!map1.insert_or_assign (1 , ' a' ).second )
292+ return false ;
293+ if ( map1.insert_or_assign (1 , ' b' ).second )
294+ return false ;
295+ if (!map1.insert_or_assign (2 , ' c' ).second )
296+ return false ;
297+ if ( map1.insert_or_assign (2 , ' d' ).second )
298+ return false ;
299+ if (!map1.insert_or_assign (3 , ' e' ).second )
300+ return false ;
301+
302+ if (map1.insert_or_assign (1 , ' a' ).second )
303+ return false ;
304+ if (map1.insert_or_assign (1 , ' b' ).second )
305+ return false ;
306+ if (map1.insert_or_assign (2 , ' c' ).second )
307+ return false ;
308+ if (map1.insert_or_assign (2 , ' d' ).second )
309+ return false ;
310+ if (map1.insert_or_assign (3 , ' e' ).second )
311+ return false ;
312+
313+ mmap1.insert (value_type (1 , ' a' ));
314+ mmap1.insert (value_type (1 , ' b' ));
315+ mmap1.insert (value_type (2 , ' c' ));
316+ mmap1.insert (value_type (2 , ' d' ));
317+ mmap1.insert (value_type (3 , ' e' ));
318+
319+ const test::non_copymovable_int find_me (2 );
320+
321+ // find
322+ if (map1.find (find_me)->second != ' d' )
323+ return false ;
324+ if (cmap1.find (find_me)->second != ' d' )
325+ return false ;
326+ if (mmap1.find (find_me)->second != ' c' )
327+ return false ;
328+ if (cmmap1.find (find_me)->second != ' c' )
329+ return false ;
330+
331+ // count
332+ if (map1.count (find_me) != 1 )
333+ return false ;
334+ if (cmap1.count (find_me) != 1 )
335+ return false ;
336+ if (mmap1.count (find_me) != 2 )
337+ return false ;
338+ if (cmmap1.count (find_me) != 2 )
339+ return false ;
340+
341+ // contains
342+ if (!map1.contains (find_me))
343+ return false ;
344+ if (!cmap1.contains (find_me))
345+ return false ;
346+ if (!mmap1.contains (find_me))
347+ return false ;
348+ if (!cmmap1.contains (find_me))
349+ return false ;
350+
351+ // lower_bound
352+ if (map1.lower_bound (find_me)->second != ' d' )
353+ return false ;
354+ if (cmap1.lower_bound (find_me)->second != ' d' )
355+ return false ;
356+ if (mmap1.lower_bound (find_me)->second != ' c' )
357+ return false ;
358+ if (cmmap1.lower_bound (find_me)->second != ' c' )
359+ return false ;
360+
361+ // upper_bound
362+ if (map1.upper_bound (find_me)->second != ' e' )
363+ return false ;
364+ if (cmap1.upper_bound (find_me)->second != ' e' )
365+ return false ;
366+ if (mmap1.upper_bound (find_me)->second != ' e' )
367+ return false ;
368+ if (cmmap1.upper_bound (find_me)->second != ' e' )
369+ return false ;
370+
371+ // equal_range
372+ if (map1.equal_range (find_me).first ->second != ' d' )
373+ return false ;
374+ if (cmap1.equal_range (find_me).second ->second != ' e' )
375+ return false ;
376+ if (mmap1.equal_range (find_me).first ->second != ' c' )
377+ return false ;
378+ if (cmmap1.equal_range (find_me).second ->second != ' e' )
379+ return false ;
380+
381+ // erase
382+ if (map1.erase (find_me) != 1 )
383+ return false ;
384+ if (map1.erase (find_me) != 0 )
385+ return false ;
386+ if (mmap1.erase (find_me) != 2 )
387+ return false ;
388+ if (mmap1.erase (find_me) != 0 )
389+ return false ;
390+ }
391+ {
392+ typedef flat_map<test::movable_int, char , less_transparent> map_t ;
393+
394+ map_t map1;
395+
396+ // insert_or_assign
397+ if (!map1.insert_or_assign (1 , ' e' ).second )
398+ return false ;
399+ if (map1.insert_or_assign (1 , ' b' ).second )
400+ return false ;
401+
402+ // insert_or_assign with hint
403+ if (map1.find (2 ) != map1.end ())
404+ return false ;
405+ map_t ::iterator i = map1.insert_or_assign (map1.begin (), 2 , ' e' );
406+ if (i != map1.insert_or_assign (map1.end (), 2 , ' b' ))
407+ return false ;
408+ }
380409
381- // erase
382- if (map1.erase (find_me) != 1 )
383- return false ;
384- if (map1.erase (find_me) != 0 )
385- return false ;
386- if (mmap1.erase (find_me) != 2 )
387- return false ;
388- if (mmap1.erase (find_me) != 0 )
389- return false ;
390410 return true ;
391411}
392412
0 commit comments