diff options
author | Jan Huwald <jh@sotun.de> | 2012-05-07 20:01:51 (GMT) |
---|---|---|
committer | Jan Huwald <jh@sotun.de> | 2012-05-07 20:01:51 (GMT) |
commit | 420d2ef464d4a741028e132e662d5626806a41f5 (patch) | |
tree | 1aca6eb512e4ed0fb5f3c10c528cb998b6ffd695 /core/test_pla_apply.cpp |
Diffstat (limited to 'core/test_pla_apply.cpp')
-rw-r--r-- | core/test_pla_apply.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/core/test_pla_apply.cpp b/core/test_pla_apply.cpp new file mode 100644 index 0000000..7e18c93 --- /dev/null +++ b/core/test_pla_apply.cpp @@ -0,0 +1,56 @@ +#include <boost/mpl/list.hpp> +#include <boost/mpl/pair.hpp> +#include <boost/tuple/tuple.hpp> +#include <iostream> + +#include "index.hpp" +#include "index_spike.hpp" +#include "pla_apply.hpp" +#include "property_composition.hpp" +#include "property_access.hpp" +#include "context.hpp" + +#include "model.hpp" // for Voltage, Weight + + +int main() { + using boost::mpl::pair; + using boost::mpl::list; + using boost::mpl::bool_; + using boost::make_tuple; + + // define a fake sim env + typedef PropertyComposition<Lists::all> pc_t; + pc_t pc; + + // set weight to 3.0 + pc.cast(PLA_Set<Weight>{0.0, Ptr<Synapse>{0}, 3.0}); + + // create and call an apply PLA + DelieverContext<SpikeArrival, Neuron> + ctx(make_tuple(Ptr<SpikeArrival>{0}, Ptr<Synapse>{0}), + Ptr<Neuron>(0)); + PLA_Apply<SpikeArrival, Neuron, pc_t> apply(Time(0), ctx); + + assert(Property_Get<Voltage>::eval(pc, ctx, Time(0)) == 0.0); + pc.call(apply); + assert(Property_Get<Voltage>::eval(pc, ctx, Time(0)) == 0.0); + + + // check for desired event generation pattern + assert(!apply.generate<SpikeArrival>()); + assert(!apply.generate<GlobalMsg>()); + assert(apply.generate<Spike>()); + assert(apply.generateAny()); + + // commit and test for proper change + assert(Property_Get<Voltage>::eval(pc, ctx, Time(0)) == 0.0); + apply.commit(pc); + assert(Property_Get<Voltage>::eval(pc, ctx, Time(0)) == 3.0); + + // additional compile time checks of helper classes + BOOST_MPL_ASSERT((ContinuousProperty_ApplyChangesProp<Voltage, SpikeArrival>)); + BOOST_MPL_ASSERT_NOT((ContinuousProperty_ApplyChangesProp<Weight, SpikeArrival>)); + + return 0; +} |