Ignore:
Timestamp:
Oct 30, 2015, 11:43:01 AM (10 years ago)
Author:
Frederik Heber <heber@…>
Children:
e24dde
Parents:
1b5188
git-author:
Frederik Heber <heber@…> (06/19/15 22:28:24)
git-committer:
Frederik Heber <heber@…> (10/30/15 11:43:01)
Message:

Added new pattern ObservedValue, contrary to Cacheable.

  • essentially updates immediately and caches a value for off-line use, safe- guard with mutexes.
  • added unit test for ObservedValue.
  • factored threeNumbers stub out of CacheableUnitTest, also used the stub in ObservedValueUnitTest.
  • we may now signOn() to Notification with a priority.
  • Cacheable can also update now via notification channels not just for global updates.
  • Observable can now also instantiate the channels directly if given a list. This was necessary as Cacheable or ObservedValue are instantiated in the constructor, too, and if listening to channels, these must already be present.
  • FIX: Channels::addChannels() used NDEBUG wrong way round.
  • ObservedValue::get() returns reference.
Location:
src/Patterns/unittests
Files:
6 added
3 edited

Legend:

Unmodified
Added
Removed
  • src/Patterns/unittests/CacheableUnitTest.cpp

    r1b5188 r454bc54  
    2828#include "CodePatterns/Cacheable.hpp"
    2929
     30#include "stubs/Cacheable_threeNumbers.hpp"
     31
    3032#ifdef HAVE_TESTRUNNER
    3133#include "UnitTestMain.hpp"
     
    3739CPPUNIT_TEST_SUITE_REGISTRATION( CacheableTest );
    3840
    39 class threeNumbers : public Observable {
    40 public:
    41   int x;
    42   int y;
    43   int z;
    44   Cacheable<int> sum;
    45   bool hasRecalced;
    46 
    47   void setX(int _x){
    48     OBSERVE;
    49     x = _x;
    50   }
    51 
    52   void setY
    53   (int _y){
    54     OBSERVE;
    55     y = _y;
    56   }
    57 
    58   void setZ(int _z){
    59     OBSERVE;
    60     z = _z;
    61   }
    62 
    63   int calcSum(){
    64     hasRecalced = true;
    65     return x+y+z;
    66   }
    67 
    68   threeNumbers(int _x,int _y, int _z) :
    69     Observable("threeNumbers"),
    70     x(_x),y(_y),z(_z),
    71     sum(this,boost::bind(&threeNumbers::calcSum,this),"sum"),
    72     hasRecalced(false)
    73   {}
    74 };
    75 
    76 
    77 
    78 
    7941void CacheableTest::setUp(){
    80   numbers = new threeNumbers(1,2,3);
     42  numbers = new Cacheable_threeNumbers(1,2,3);
     43  Observable::channels_t ychannel(1, Cacheable_threeNumbers::YChanged);
     44  YChange_numbers = new Cacheable_threeNumbers(1,2,3, ychannel);
    8145}
    8246
     
    10165  CPPUNIT_ASSERT_EQUAL( true, numbers->hasRecalced);
    10266#endif
     67
     68  CPPUNIT_ASSERT_EQUAL( 6, *(YChange_numbers->sum));
     69  CPPUNIT_ASSERT_EQUAL( true, YChange_numbers->hasRecalced);
     70  YChange_numbers->hasRecalced=false;
     71  YChange_numbers->setX(4);
     72  CPPUNIT_ASSERT_EQUAL( false, YChange_numbers->hasRecalced);
     73  CPPUNIT_ASSERT_EQUAL( 6, *(YChange_numbers->sum));
     74  CPPUNIT_ASSERT_EQUAL( false, YChange_numbers->hasRecalced);
     75  YChange_numbers->hasRecalced=false;
     76  YChange_numbers->setY(4);
     77  CPPUNIT_ASSERT_EQUAL( false, YChange_numbers->hasRecalced);
     78  CPPUNIT_ASSERT_EQUAL( 11, *(YChange_numbers->sum));
     79  CPPUNIT_ASSERT_EQUAL( true, YChange_numbers->hasRecalced);
     80  YChange_numbers->hasRecalced=false;
     81  CPPUNIT_ASSERT_EQUAL( 11, *(YChange_numbers->sum));
     82#ifndef NO_CACHING
     83  CPPUNIT_ASSERT_EQUAL( false, YChange_numbers->hasRecalced);
     84#else
     85  CPPUNIT_ASSERT_EQUAL( true, YChange_numbers->hasRecalced);
     86#endif
    10387}
  • src/Patterns/unittests/CacheableUnitTest.hpp

    r1b5188 r454bc54  
    1818
    1919// stub classes
    20 class threeNumbers;
     20class Cacheable_threeNumbers;
    2121
    2222class CacheableTest :  public CppUnit::TestFixture
     
    3131
    3232  void doesRecalcTest();
    33   threeNumbers *numbers;
     33  Cacheable_threeNumbers *numbers;
     34  Cacheable_threeNumbers *YChange_numbers;
    3435};
    3536
  • src/Patterns/unittests/Makefile.am

    r1b5188 r454bc54  
    1111        ManipulableCloneUnitTest \
    1212        ManipulablePrototypeFactoryUnitTest \
     13        ObservedValueUnitTest \
    1314        PrototypeFactoryUnitTest \
    1415        RegistryUnitTest \
     
    2223        ../Patterns/unittests/ManipulableCloneUnitTest.cpp \
    2324        ../Patterns/unittests/ManipulablePrototypeFactoryUnitTest.cpp \
     25        ../Patterns/unittests/ObservedValueUnitTest.cpp \
    2426        ../Patterns/unittests/PrototypeFactoryUnitTest.cpp \
    2527        ../Patterns/unittests/RegistryUnitTest.cpp \
    2628        ../Patterns/unittests/SingletonUnitTest.cpp \
     29        ../Patterns/unittests/stubs/Cacheable_threeNumbers.cpp \
    2730        ../Patterns/unittests/stubs/CloneStub.cpp \
    2831        ../Patterns/unittests/stubs/CommonStub.cpp \
     
    3134        ../Patterns/unittests/stubs/ManipulableCloneStub.cpp \
    3235        ../Patterns/unittests/stubs/ManipulablePrototypeFactoryStub.cpp \
     36        ../Patterns/unittests/stubs/ObservedValue_threeNumbers.cpp \
    3337        ../Patterns/unittests/stubs/PrototypeFactoryStub.cpp \
    3438        ../Patterns/unittests/stubs/RegistryStub.cpp
     
    4145        ../Patterns/unittests/ManipulableCloneUnitTest.hpp \
    4246        ../Patterns/unittests/ManipulablePrototypeFactoryUnitTest.hpp \
     47        ../Patterns/unittests/ObservedValueUnitTest.hpp \
    4348        ../Patterns/unittests/PrototypeFactoryUnitTest.hpp \
    4449        ../Patterns/unittests/RegistryUnitTest.hpp \
    4550        ../Patterns/unittests/SingletonUnitTest.hpp \
     51        ../Patterns/unittests/stubs/Cacheable_threeNumbers.hpp \
    4652        ../Patterns/unittests/stubs/CloneStub.hpp \
    4753        ../Patterns/unittests/stubs/CommonStub.hpp \
     
    5763        ../Patterns/unittests/stubs/ManipulablePrototypeFactoryStub.def \
    5864        ../Patterns/unittests/stubs/ManipulablePrototypeFactoryStub.undef \
     65        ../Patterns/unittests/stubs/ObservedValue_threeNumbers.hpp \
    5966        ../Patterns/unittests/stubs/PrototypeFactoryStub.def \
    6067        ../Patterns/unittests/stubs/PrototypeFactoryStub.undef \
     
    6673CacheableUnitTest_SOURCES = UnitTestMain.cpp \
    6774        ../Patterns/unittests/CacheableUnitTest.cpp \
    68         ../Patterns/unittests/CacheableUnitTest.hpp
     75        ../Patterns/unittests/CacheableUnitTest.hpp \
     76        ../Patterns/unittests/stubs/Cacheable_threeNumbers.cpp \
     77        ../Patterns/unittests/stubs/Cacheable_threeNumbers.hpp
    6978nodist_CacheableUnitTest_SOURCES = \
    7079        $(top_srcdir)/src/CodePatterns/Cachable.hpp \
     
    140149        $(top_srcdir)/src/CodePatterns/ManipulablePrototypeFactory_impl.hpp
    141150ManipulablePrototypeFactoryUnitTest_LDADD = \
     151        ../Helpers/libCodePatterns-Helpers-debug.la
     152
     153ObservedValueUnitTest_SOURCES = UnitTestMain.cpp \
     154        ../Patterns/unittests/ObservedValueUnitTest.cpp \
     155        ../Patterns/unittests/ObservedValueUnitTest.hpp \
     156        ../Patterns/unittests/stubs/ObservedValue_threeNumbers.cpp \
     157        ../Patterns/unittests/stubs/ObservedValue_threeNumbers.hpp
     158nodist_ObservedValueUnitTest_SOURCES = \
     159        $(top_srcdir)/src/CodePatterns/ObservedValue.hpp \
     160        $(top_srcdir)/src/CodePatterns/Observer/Observer.hpp
     161ObservedValueUnitTest_LDADD = \
     162        ../Observer/libCodePatterns-Observer-debug.la \
     163        ../Patterns/libCodePatterns-Patterns-debug.la \
    142164        ../Helpers/libCodePatterns-Helpers-debug.la
    143165
Note: See TracChangeset for help on using the changeset viewer.