Changeset 7421


Ignore:
Timestamp:
02/07/12 16:27:26 (2 years ago)
Author:
jdsiiro
Message:
  • Fixing the propagation of onClear events through Pareto views
  • Adding a test verifying that a Pareto view on a Pareto view correctly reflects the Pareto set.
Location:
colin/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • colin/trunk/src/colin/cache/View_Pareto.h

    r7417 r7421  
    5858private: 
    5959   /// 
     60   void cb_clear(const Application_Base *context = NULL); 
     61 
    6062   void cb_rebuild( const utilib::ReadOnly_Property& ); 
    6163 
  • colin/trunk/src/libs/Cache_View_Pareto.cpp

    r7417 r7421  
    129129{ 
    130130   // First, notify any dependent views that things are changing 
    131    onClear(NULL); 
     131   cb_clear(NULL); 
    132132 
    133133   ApplicationHandle context = application_context; 
    134    members.clear(); 
    135134   core_context = get_core_application(context.object()); 
    136135   sense.clear(); 
     
    171170   connections.push_back 
    172171      ( core_cache->onClear.connect 
    173         ( boost::bind(&View_Pareto::clear, this, _1) ) ); 
     172        ( boost::bind(&View_Pareto::cb_clear, this, _1) ) ); 
    174173 
    175174   // Catch any insertions so we can update the Pareto fontier 
     
    213212                          const CoreResponseInfo& response ) 
    214213{ 
    215    if ( ! application_context.as<ApplicationHandle>().object() ) 
     214   if ( ! core_context ) 
    216215      application_context = ApplicationHandle(context); 
    217216 
     
    263262 
    264263void  
     264View_Pareto::cb_clear( const Application_Base* context ) 
     265{ 
     266   if ( context && core_context != context ) 
     267      return; 
     268 
     269   onClear(context); 
     270   members.clear(); 
     271   for ( size_t i = 0; i < so_optima.size(); ++i ) 
     272      so_optima[i].clear(); 
     273} 
     274 
     275 
     276void  
    265277View_Pareto::cb_insert(cache_t::iterator src) 
    266278{ 
    267    if ( ! application_context.as<ApplicationHandle>().object() ) 
     279   if ( ! core_context ) 
    268280      application_context = ApplicationHandle(src->first.context); 
    269281 
  • colin/trunk/test/unit/TView_Pareto.h

    r7246 r7421  
    771771   } 
    772772 
     773 
     774   void assert_cache_equal(CacheHandle a, CacheHandle b) 
     775   { 
     776      TS_ASSERT_EQUALS( a->size(), b->size() ); 
     777      Cache::iterator it_a = a->begin(); 
     778      Cache::iterator it_b = b->begin(); 
     779      while ( it_a != a->end() && it_b != b->end() ) 
     780      { 
     781         TS_ASSERT_EQUALS(it_a->first, it_b->first); 
     782         ++it_a; 
     783         ++it_b; 
     784      } 
     785      TS_ASSERT_EQUALS(it_a, a->end()); 
     786      TS_ASSERT_EQUALS(it_b, b->end()); 
     787   } 
     788 
     789 
     790   void test_nested_Pareto_views() 
     791   { 
     792      CacheHandle cache2 = CacheFactory().create_view("Pareto", cache); 
     793      assert_cache_equal(cache, cache2); 
     794 
     795      // trivial insertions 
     796      cache->insert(mo_app->EvalMF(domain(1,1))); 
     797      TS_ASSERT_EQUALS( cache->size(), 1 ); 
     798      assert_cache_equal(cache, cache2); 
     799      cache->insert(mo_app->EvalMF(domain(1.5,.5))); 
     800      TS_ASSERT_EQUALS( cache->size(), 2 ); 
     801      assert_cache_equal(cache, cache2); 
     802 
     803      // insertion triggers deletion 
     804      cache->insert(mo_app->EvalMF(domain(.4,.4))); 
     805      TS_ASSERT_EQUALS( cache->size(), 1 ); 
     806      assert_cache_equal(cache, cache2); 
     807 
     808      // core deletion triggers re-insertion 
     809      core_cache->erase 
     810         ( cache->property("application_context").as<ApplicationHandle>().object(), 
     811           domain(.4,.4) ); 
     812      TS_ASSERT_EQUALS( cache->size(), 2 ); 
     813      assert_cache_equal(cache, cache2); 
     814 
     815      // clear 
     816      core_cache->clear(); 
     817      TS_ASSERT_EQUALS( cache->size(), 0 ); 
     818      assert_cache_equal(cache, cache2); 
     819   } 
     820 
    773821private: 
    774822 
Note: See TracChangeset for help on using the changeset viewer.