From ae4f22ef710944572ea900c0d1368fd4089a1c4e Mon Sep 17 00:00:00 2001 From: neworderofjamie Date: Tue, 6 Jul 2021 12:47:02 +0100 Subject: [PATCH 1/3] framework for validating population and parameter names --- include/genn/genn/currentSource.h | 4 +++ include/genn/genn/currentSourceModels.h | 3 +++ include/genn/genn/customUpdate.h | 5 ++++ include/genn/genn/customUpdateModels.h | 3 +++ include/genn/genn/gennUtils.h | 21 +++++++++++++++ .../genn/genn/initSparseConnectivitySnippet.h | 3 +++ include/genn/genn/initVarSnippet.h | 3 +++ include/genn/genn/models.h | 3 +++ include/genn/genn/neuronGroup.h | 4 +++ include/genn/genn/neuronModels.h | 3 +++ include/genn/genn/postsynapticModels.h | 3 +++ include/genn/genn/snippet.h | 10 +++++++ include/genn/genn/weightUpdateModels.h | 3 +++ src/genn/genn/customUpdateModels.cc | 8 ++++++ src/genn/genn/gennUtils.cc | 27 +++++++++++++++++++ .../genn/initSparseConnectivitySnippet.cc | 8 ++++++ src/genn/genn/models.cc | 9 +++++++ src/genn/genn/neuronModels.cc | 8 ++++++ src/genn/genn/synapseGroup.cc | 5 ++++ src/genn/genn/weightUpdateModels.cc | 9 +++++++ 20 files changed, 142 insertions(+) diff --git a/include/genn/genn/currentSource.h b/include/genn/genn/currentSource.h index 43b6e277a7..837b3b8e5e 100644 --- a/include/genn/genn/currentSource.h +++ b/include/genn/genn/currentSource.h @@ -9,6 +9,7 @@ // GeNN includes #include "currentSourceModels.h" #include "gennExport.h" +#include "gennUtils.h" #include "variableMode.h" // Forward declarations @@ -68,6 +69,9 @@ class GENN_EXPORT CurrentSource m_TrgNeuronGroup(trgNeuronGroup), m_VarLocation(varInitialisers.size(), defaultVarLocation), m_ExtraGlobalParamLocation(currentSourceModel->getExtraGlobalParams().size(), defaultExtraGlobalParamLocation) { + // Validate names + Utils::validateVarPopName(name, "Current source"); + getCurrentSourceModel()->validateNames(); } //------------------------------------------------------------------------ diff --git a/include/genn/genn/currentSourceModels.h b/include/genn/genn/currentSourceModels.h index 6523fed8d9..f0f7c90cee 100644 --- a/include/genn/genn/currentSourceModels.h +++ b/include/genn/genn/currentSourceModels.h @@ -37,6 +37,9 @@ class GENN_EXPORT Base : public Models::Base //---------------------------------------------------------------------------- //! Update hash from model boost::uuids::detail::sha1::digest_type getHashDigest() const; + + //! Validate names of parameters etc + using Models::Base::validateNames; }; //---------------------------------------------------------------------------- diff --git a/include/genn/genn/customUpdate.h b/include/genn/genn/customUpdate.h index 036b26dc7f..5c391a4ce6 100644 --- a/include/genn/genn/customUpdate.h +++ b/include/genn/genn/customUpdate.h @@ -6,6 +6,7 @@ // GeNN includes #include "gennExport.h" +#include "gennUtils.h" #include "customUpdateModels.h" #include "variableMode.h" @@ -56,6 +57,10 @@ class GENN_EXPORT CustomUpdateBase m_ExtraGlobalParamLocation(customUpdateModel->getExtraGlobalParams().size(), defaultExtraGlobalParamLocation), m_Batched(false) { + // Validate names + Utils::validateVarPopName(name, "Custom update"); + Utils::validateVarPopName(updateGroupName, "Custom update group name"); + getCustomUpdateModel()->validateNames(); } //------------------------------------------------------------------------ diff --git a/include/genn/genn/customUpdateModels.h b/include/genn/genn/customUpdateModels.h index d6589b8f56..475aa40e17 100644 --- a/include/genn/genn/customUpdateModels.h +++ b/include/genn/genn/customUpdateModels.h @@ -41,6 +41,9 @@ class GENN_EXPORT Base : public Models::Base //---------------------------------------------------------------------------- //! Update hash from model boost::uuids::detail::sha1::digest_type getHashDigest() const; + + //! Validate names of parameters etc + void validateNames() const; }; //---------------------------------------------------------------------------- diff --git a/include/genn/genn/gennUtils.h b/include/genn/genn/gennUtils.h index d154d8277d..290e69a9ab 100644 --- a/include/genn/genn/gennUtils.h +++ b/include/genn/genn/gennUtils.h @@ -54,6 +54,27 @@ GENN_EXPORT bool isTypePointerToPointer(const std::string &type); //-------------------------------------------------------------------------- GENN_EXPORT std::string getUnderlyingType(const std::string &type); +//-------------------------------------------------------------------------- +//! \brief Is the variable/population name valid? GeNN variables and population names must obey C variable naming rules +//-------------------------------------------------------------------------- +GENN_EXPORT void validateVarPopName(const std::string &name, const std::string &description); + +//-------------------------------------------------------------------------- +//! \brief Are all the parameter names in vector valid? GeNN variables and population names must obey C variable naming rules +//-------------------------------------------------------------------------- +GENN_EXPORT void validateParamNames(const std::vector ¶mNames); + +//-------------------------------------------------------------------------- +//! \brief Are the 'name' fields of all structs in vector valid? GeNN variables and population names must obey C variable naming rules +//-------------------------------------------------------------------------- +template +void validateVecNames(const std::vector &vec, const std::string &description) +{ + for(const auto &v : vec) { + validateVarPopName(v.name, description); + } +} + //-------------------------------------------------------------------------- //! \brief This function writes a floating point value to a stream -setting the precision so no digits are lost //-------------------------------------------------------------------------- diff --git a/include/genn/genn/initSparseConnectivitySnippet.h b/include/genn/genn/initSparseConnectivitySnippet.h index 3dfe17ec75..07226b25e1 100644 --- a/include/genn/genn/initSparseConnectivitySnippet.h +++ b/include/genn/genn/initSparseConnectivitySnippet.h @@ -70,6 +70,9 @@ class GENN_EXPORT Base : public Snippet::Base //------------------------------------------------------------------------ //! Update hash from snippet boost::uuids::detail::sha1::digest_type getHashDigest() const; + + //! Validate names of parameters etc + void validateNames() const; }; //---------------------------------------------------------------------------- diff --git a/include/genn/genn/initVarSnippet.h b/include/genn/genn/initVarSnippet.h index 94690fdd69..e82b4151b0 100644 --- a/include/genn/genn/initVarSnippet.h +++ b/include/genn/genn/initVarSnippet.h @@ -28,6 +28,9 @@ class GENN_EXPORT Base : public Snippet::Base //! Update hash from snippet boost::uuids::detail::sha1::digest_type getHashDigest() const; + //! Validate names of parameters etc + using Snippet::Base::validateNames; + //! Does this var init snippet require kernel-based connectivity bool requiresKernel() const; }; diff --git a/include/genn/genn/models.h b/include/genn/genn/models.h index 6f57070156..29c5ae4281 100644 --- a/include/genn/genn/models.h +++ b/include/genn/genn/models.h @@ -117,6 +117,9 @@ class GENN_EXPORT Base : public Snippet::Base // Protected methods //------------------------------------------------------------------------ void updateHash(boost::uuids::detail::sha1 &hash) const; + + //! Validate names of parameters etc + void validateNames() const; }; diff --git a/include/genn/genn/neuronGroup.h b/include/genn/genn/neuronGroup.h index f88380eecb..4c9077c158 100644 --- a/include/genn/genn/neuronGroup.h +++ b/include/genn/genn/neuronGroup.h @@ -8,6 +8,7 @@ // GeNN includes #include "gennExport.h" +#include "gennUtils.h" #include "neuronModels.h" #include "variableMode.h" @@ -205,6 +206,9 @@ class GENN_EXPORT NeuronGroup m_VarLocation(varInitialisers.size(), defaultVarLocation), m_ExtraGlobalParamLocation(neuronModel->getExtraGlobalParams().size(), defaultExtraGlobalParamLocation), m_SpikeRecordingEnabled(false), m_SpikeEventRecordingEnabled(false) { + // Validate names + Utils::validateVarPopName(name, "Neuron group"); + getNeuronModel()->validateNames(); } //------------------------------------------------------------------------ diff --git a/include/genn/genn/neuronModels.h b/include/genn/genn/neuronModels.h index 1c8f0e7855..eeb5dedb75 100644 --- a/include/genn/genn/neuronModels.h +++ b/include/genn/genn/neuronModels.h @@ -65,6 +65,9 @@ class GENN_EXPORT Base : public Models::Base //---------------------------------------------------------------------------- //! Update hash from model boost::uuids::detail::sha1::digest_type getHashDigest() const; + + //! Validate names of parameters etc + void validateNames() const; }; //---------------------------------------------------------------------------- diff --git a/include/genn/genn/postsynapticModels.h b/include/genn/genn/postsynapticModels.h index 7880d5c44c..0bb69c7c99 100644 --- a/include/genn/genn/postsynapticModels.h +++ b/include/genn/genn/postsynapticModels.h @@ -35,6 +35,9 @@ class GENN_EXPORT Base : public Models::Base //---------------------------------------------------------------------------- //! Update hash from model boost::uuids::detail::sha1::digest_type getHashDigest() const; + + //! Validate names of parameters etc + using Models::Base::validateNames; }; //---------------------------------------------------------------------------- diff --git a/include/genn/genn/snippet.h b/include/genn/genn/snippet.h index 97b3fdb171..26857f2ee5 100644 --- a/include/genn/genn/snippet.h +++ b/include/genn/genn/snippet.h @@ -214,6 +214,14 @@ class GENN_EXPORT Base Utils::updateHash(getExtraGlobalParams(), hash); } + //! Validate names of parameters etc + void validateNames() const + { + Utils::validateParamNames(getParamNames()); + Utils::validateVecNames(getDerivedParams(), "Derived parameter"); + Utils::validateVecNames(getExtraGlobalParams(), "Derived parameter"); + } + //------------------------------------------------------------------------ // Protected static helpers //------------------------------------------------------------------------ @@ -245,6 +253,8 @@ class Init Init(const SnippetBase *snippet, const std::vector ¶ms) : m_Snippet(snippet), m_Params(params) { + // Validate names + getSnippet()->validateNames(); } //---------------------------------------------------------------------------- diff --git a/include/genn/genn/weightUpdateModels.h b/include/genn/genn/weightUpdateModels.h index 68c41c8b81..fd18398e30 100644 --- a/include/genn/genn/weightUpdateModels.h +++ b/include/genn/genn/weightUpdateModels.h @@ -151,6 +151,9 @@ class GENN_EXPORT Base : public Models::Base //! Update hash from model boost::uuids::detail::sha1::digest_type getHashDigest() const; + + //! Validate names of parameters etc + void validateNames() const; }; //---------------------------------------------------------------------------- diff --git a/src/genn/genn/customUpdateModels.cc b/src/genn/genn/customUpdateModels.cc index 25320d4315..6327da37dd 100644 --- a/src/genn/genn/customUpdateModels.cc +++ b/src/genn/genn/customUpdateModels.cc @@ -17,3 +17,11 @@ boost::uuids::detail::sha1::digest_type CustomUpdateModels::Base::getHashDigest( Utils::updateHash(getVarRefs(), hash); return hash.get_digest(); } +//---------------------------------------------------------------------------- +void CustomUpdateModels::Base::validateNames() const +{ + // Superclass + Models::Base::validateNames(); + + Utils::validateVecNames(getVarRefs(), "Variable reference"); +} diff --git a/src/genn/genn/gennUtils.cc b/src/genn/genn/gennUtils.cc index 4e61630c22..04e9c70ec6 100644 --- a/src/genn/genn/gennUtils.cc +++ b/src/genn/genn/gennUtils.cc @@ -93,4 +93,31 @@ std::string getUnderlyingType(const std::string &type) return type.substr(0, type.length() - 1); } } +//-------------------------------------------------------------------------- +void validateVarPopName(const std::string &name, const std::string &description) +{ + // Empty names aren't valid + if(name.empty()) { + throw std::runtime_error(description + " name invalid: cannot be empty"); + } + + // If first character's a number, name isn't valid + if(std::isdigit(name.front())) { + throw std::runtime_error(description + " name invalid: '" + name + "' starts with a digit"); + } + + // If any characters aren't underscores or alphanumeric, name isn't valud + if(std::any_of(name.cbegin(), name.cend(), + [](char c) { return (c != '_') && !std::isalnum(c); })) + { + throw std::runtime_error(description + " name invalid: '" + name + "' contains an illegal character"); + } +} +//-------------------------------------------------------------------------- +void validateParamNames(const std::vector ¶mNames) +{ + for(const std::string &p : paramNames) { + validateVarPopName(p, "Parameter"); + } +} } // namespace utils diff --git a/src/genn/genn/initSparseConnectivitySnippet.cc b/src/genn/genn/initSparseConnectivitySnippet.cc index 581abfdd83..1443e5f673 100644 --- a/src/genn/genn/initSparseConnectivitySnippet.cc +++ b/src/genn/genn/initSparseConnectivitySnippet.cc @@ -26,3 +26,11 @@ boost::uuids::detail::sha1::digest_type InitSparseConnectivitySnippet::Base::get Utils::updateHash(getHostInitCode(), hash); return hash.get_digest(); } +//---------------------------------------------------------------------------- +void InitSparseConnectivitySnippet::Base::validateNames() const +{ + // Superclass + Snippet::Base::validateNames(); + Utils::validateVecNames(getRowBuildStateVars(), "Row building state variable"); + Utils::validateVecNames(getColBuildStateVars(), "Column building state variable"); +} diff --git a/src/genn/genn/models.cc b/src/genn/genn/models.cc index 2c8ec3323b..0cccfacc8f 100644 --- a/src/genn/genn/models.cc +++ b/src/genn/genn/models.cc @@ -18,6 +18,15 @@ void Base::updateHash(boost::uuids::detail::sha1 &hash) const Utils::updateHash(getVars(), hash); } +//---------------------------------------------------------------------------- +void Base::validateNames() const +{ + // Superclass + Snippet::Base::validateNames(); + + Utils::validateVecNames(getVars(), "Variable"); +} + //---------------------------------------------------------------------------- // VarReference //---------------------------------------------------------------------------- diff --git a/src/genn/genn/neuronModels.cc b/src/genn/genn/neuronModels.cc index 11bc584f7c..33206519c3 100644 --- a/src/genn/genn/neuronModels.cc +++ b/src/genn/genn/neuronModels.cc @@ -31,3 +31,11 @@ boost::uuids::detail::sha1::digest_type NeuronModels::Base::getHashDigest() cons Utils::updateHash(getAdditionalInputVars(), hash); return hash.get_digest(); } +//---------------------------------------------------------------------------- +void NeuronModels::Base::validateNames() const +{ + // Superclass + Models::Base::validateNames(); + + Utils::validateVecNames(getAdditionalInputVars(), "Additional input variable"); +} diff --git a/src/genn/genn/synapseGroup.cc b/src/genn/genn/synapseGroup.cc index 5f602c9aeb..d43b28d7cc 100644 --- a/src/genn/genn/synapseGroup.cc +++ b/src/genn/genn/synapseGroup.cc @@ -439,6 +439,11 @@ SynapseGroup::SynapseGroup(const std::string &name, SynapseMatrixType matrixType m_ConnectivityInitialiser(connectivityInitialiser), m_SparseConnectivityLocation(defaultSparseConnectivityLocation), m_ConnectivityExtraGlobalParamLocation(connectivityInitialiser.getSnippet()->getExtraGlobalParams().size(), defaultExtraGlobalParamLocation), m_PSModelTargetName(name) { + // Validate names + Utils::validateVarPopName(name, "Synapse group"); + getWUModel()->validateNames(); + getPSModel()->validateNames(); + // If connectivity is procedural if(m_MatrixType & SynapseMatrixConnectivity::PROCEDURAL) { // If there's no row build code, give an error diff --git a/src/genn/genn/weightUpdateModels.cc b/src/genn/genn/weightUpdateModels.cc index 9b26e794ed..a419dbd1cd 100644 --- a/src/genn/genn/weightUpdateModels.cc +++ b/src/genn/genn/weightUpdateModels.cc @@ -36,3 +36,12 @@ boost::uuids::detail::sha1::digest_type WeightUpdateModels::Base::getHashDigest( // Return digest return hash.get_digest(); } +//---------------------------------------------------------------------------- +void WeightUpdateModels::Base::validateNames() const +{ + // Superclass + Models::Base::validateNames(); + + Utils::validateVecNames(getPreVars(), "Presynaptic variable"); + Utils::validateVecNames(getPostVars(), "Presynaptic variable"); +} From d5f36390c631ec6d77e604721dc4474e2bb391d7 Mon Sep 17 00:00:00 2001 From: neworderofjamie Date: Tue, 6 Jul 2021 15:26:02 +0100 Subject: [PATCH 2/3] basic tests --- tests/unit/currentSource.cc | 16 +++++++++ tests/unit/customUpdate.cc | 42 +++++++++++++++++++++++ tests/unit/gennUtils.cc | 68 +++++++++++++++++++++++++++++++++++++ tests/unit/neuronGroup.cc | 11 ++++++ tests/unit/synapseGroup.cc | 20 +++++++++++ tests/unit/unit.vcxproj | 1 + 6 files changed, 158 insertions(+) create mode 100644 tests/unit/gennUtils.cc diff --git a/tests/unit/currentSource.cc b/tests/unit/currentSource.cc index 2245ba2b0c..c1d745609d 100644 --- a/tests/unit/currentSource.cc +++ b/tests/unit/currentSource.cc @@ -87,3 +87,19 @@ TEST(CurrentSource, CompareSameParameters) CurrentSourceInternal *cs1Internal = static_cast(cs1); ASSERT_EQ(cs0Internal->getHashDigest(), cs1Internal->getHashDigest()); } + +TEST(CurrentSource, InvalidName) +{ + NeuronModels::Izhikevich::ParamValues paramVals(0.02, 0.2, -65.0, 8.0); + NeuronModels::Izhikevich::VarValues varVals(0.0, 0.0); + + ModelSpec model; + auto *pop = model.addNeuronPopulation("Pop", 10, paramVals, varVals); + + try { + model.addCurrentSource("6CS", "Pop", {1.0}, {}); + FAIL(); + } + catch(const std::runtime_error &) { + } +} \ No newline at end of file diff --git a/tests/unit/customUpdate.cc b/tests/unit/customUpdate.cc index a2a8c31b3e..7658f8c61a 100644 --- a/tests/unit/customUpdate.cc +++ b/tests/unit/customUpdate.cc @@ -582,3 +582,45 @@ TEST(CustomUpdates, CompareDifferentWUConnectivity) ASSERT_TRUE(modelSpecMerged.getMergedCustomWUUpdateDenseInitGroups().size() == 1); ASSERT_TRUE(modelSpecMerged.getMergedCustomWUUpdateSparseInitGroups().size() == 1); } +//-------------------------------------------------------------------------- +TEST(CustomUpdates, InvalidName) +{ + ModelSpec model; + + // Add neuron group to model + NeuronModels::Izhikevich::ParamValues paramVals(0.02, 0.2, -65.0, 8.0); + NeuronModels::Izhikevich::VarValues varVals(0.0, 0.0); + auto *ng1 = model.addNeuronPopulation("Neuron1", 10, paramVals, varVals); + + Sum::VarValues sumVarValues(0.0); + Sum::VarReferences sumVarReferences1(createVarRef(ng1, "V"), createVarRef(ng1, "U")); + + try { + model.addCustomUpdate("1Sum", "CustomUpdate", + {}, sumVarValues, sumVarReferences1); + FAIL(); + } + catch(const std::runtime_error &) { + } +} +//-------------------------------------------------------------------------- +TEST(CustomUpdates, InvalidUpdateGroupName) +{ + ModelSpec model; + + // Add neuron group to model + NeuronModels::Izhikevich::ParamValues paramVals(0.02, 0.2, -65.0, 8.0); + NeuronModels::Izhikevich::VarValues varVals(0.0, 0.0); + auto *ng1 = model.addNeuronPopulation("Neuron1", 10, paramVals, varVals); + + Sum::VarValues sumVarValues(0.0); + Sum::VarReferences sumVarReferences1(createVarRef(ng1, "V"), createVarRef(ng1, "U")); + + try { + model.addCustomUpdate("Sum", "1CustomUpdate", + {}, sumVarValues, sumVarReferences1); + FAIL(); + } + catch(const std::runtime_error &) { + } +} \ No newline at end of file diff --git a/tests/unit/gennUtils.cc b/tests/unit/gennUtils.cc new file mode 100644 index 0000000000..26a2a608f1 --- /dev/null +++ b/tests/unit/gennUtils.cc @@ -0,0 +1,68 @@ +// Google test includes +#include "gtest/gtest.h" + +// GeNN includes +#include "gennUtils.h" +#include "snippet.h" + +//-------------------------------------------------------------------------- +// Anonymous namespace +//-------------------------------------------------------------------------- +namespace +{ +void validateVarPopNameDeathTest(const std::string &name) +{ + try { + Utils::validateVarPopName(name, "test"); + FAIL(); + } + + catch(const std::runtime_error &) { + } +} +} + +//-------------------------------------------------------------------------- +// Tests +//-------------------------------------------------------------------------- +TEST(GeNNUtils, ValidateVarPopName) +{ + Utils::validateVarPopName("test", "test"); + Utils::validateVarPopName("Test", "test"); + Utils::validateVarPopName("test123", "test"); + Utils::validateVarPopName("test_123", "test"); + Utils::validateVarPopName("_test_123", "test"); + + validateVarPopNameDeathTest(""); + validateVarPopNameDeathTest("1test"); + validateVarPopNameDeathTest("test.test"); + validateVarPopNameDeathTest("test-test"); +} +//-------------------------------------------------------------------------- +TEST(GeNNUtils, ValidateParamNames) +{ + Utils::validateParamNames({"test", "Test", "test123"}); + + try { + Utils::validateParamNames({"test", "test.test"}); + FAIL(); + } + + catch(const std::runtime_error &) { + } +} +//-------------------------------------------------------------------------- +TEST(GeNNUtils, ValidateVecNames) +{ + const Snippet::Base::ParamValVec good{{"test", "scalar", 1.0}, {"Test", "scalar", 0.0}}; + Utils::validateVecNames(good, "test"); + + try { + const Snippet::Base::ParamValVec bad{{"test", "scalar", 1.0}, {"test.test", "scalar", 0.0}}; + Utils::validateVecNames(bad, "test"); + FAIL(); + } + + catch(const std::runtime_error &) { + } +} \ No newline at end of file diff --git a/tests/unit/neuronGroup.cc b/tests/unit/neuronGroup.cc index 632cbd67a1..13b28bfe4a 100644 --- a/tests/unit/neuronGroup.cc +++ b/tests/unit/neuronGroup.cc @@ -150,6 +150,17 @@ IMPLEMENT_MODEL(LIFRandom); //-------------------------------------------------------------------------- // Tests //-------------------------------------------------------------------------- +TEST(NeuronGroup, InvalidName) +{ + ModelSpec model; + try { + model.addNeuronPopulation("0Neurons", 10, {}, {}); + FAIL(); + } + catch(const std::runtime_error &) { + } +} + TEST(NeuronGroup, ConstantVarIzhikevich) { ModelSpec model; diff --git a/tests/unit/synapseGroup.cc b/tests/unit/synapseGroup.cc index f2ba10dbe8..d238f5ebfe 100644 --- a/tests/unit/synapseGroup.cc +++ b/tests/unit/synapseGroup.cc @@ -692,6 +692,26 @@ TEST(SynapseGroup, InvalidMatrixTypes) } } +TEST(SynapseGroup, InvalidName) +{ + NeuronModels::Izhikevich::ParamValues paramVals(0.02, 0.2, -65.0, 8.0); + NeuronModels::Izhikevich::VarValues varVals(0.0, 0.0); + + ModelSpec model; + auto *pre = model.addNeuronPopulation("Pre", 10, {}, {}); + auto *post = model.addNeuronPopulation("Post", 10, paramVals, varVals); + try { + model.addSynapsePopulation( + "6Syn", SynapseMatrixType::DENSE_GLOBALG, NO_DELAY, + "Pre", "Post", + {}, {1.0}, + {}, {}); + FAIL(); + } + catch(const std::runtime_error &) { + } +} + TEST(SynapseGroup, SharedWeightSlaveInvalidMethods) { ModelSpecInternal model; diff --git a/tests/unit/unit.vcxproj b/tests/unit/unit.vcxproj index b78e9cfa5c..fc5b545990 100644 --- a/tests/unit/unit.vcxproj +++ b/tests/unit/unit.vcxproj @@ -19,6 +19,7 @@ + From d4d4f0fb7984c82569dc4f293f57bb20bc8c0538 Mon Sep 17 00:00:00 2001 From: neworderofjamie Date: Tue, 20 Jul 2021 16:38:31 +0100 Subject: [PATCH 3/3] renamed validateNames to validate --- include/genn/genn/currentSource.h | 2 +- include/genn/genn/currentSourceModels.h | 2 +- include/genn/genn/customUpdate.h | 2 +- include/genn/genn/customUpdateModels.h | 2 +- include/genn/genn/initSparseConnectivitySnippet.h | 2 +- include/genn/genn/initVarSnippet.h | 2 +- include/genn/genn/models.h | 2 +- include/genn/genn/neuronGroup.h | 2 +- include/genn/genn/neuronModels.h | 2 +- include/genn/genn/postsynapticModels.h | 2 +- include/genn/genn/snippet.h | 4 ++-- include/genn/genn/weightUpdateModels.h | 2 +- src/genn/genn/customUpdateModels.cc | 4 ++-- src/genn/genn/initSparseConnectivitySnippet.cc | 4 ++-- src/genn/genn/models.cc | 6 +++--- src/genn/genn/neuronModels.cc | 4 ++-- src/genn/genn/synapseGroup.cc | 4 ++-- src/genn/genn/weightUpdateModels.cc | 4 ++-- 18 files changed, 26 insertions(+), 26 deletions(-) diff --git a/include/genn/genn/currentSource.h b/include/genn/genn/currentSource.h index 837b3b8e5e..f367d29268 100644 --- a/include/genn/genn/currentSource.h +++ b/include/genn/genn/currentSource.h @@ -71,7 +71,7 @@ class GENN_EXPORT CurrentSource { // Validate names Utils::validateVarPopName(name, "Current source"); - getCurrentSourceModel()->validateNames(); + getCurrentSourceModel()->validate(); } //------------------------------------------------------------------------ diff --git a/include/genn/genn/currentSourceModels.h b/include/genn/genn/currentSourceModels.h index f0f7c90cee..9a9c54b782 100644 --- a/include/genn/genn/currentSourceModels.h +++ b/include/genn/genn/currentSourceModels.h @@ -39,7 +39,7 @@ class GENN_EXPORT Base : public Models::Base boost::uuids::detail::sha1::digest_type getHashDigest() const; //! Validate names of parameters etc - using Models::Base::validateNames; + using Models::Base::validate; }; //---------------------------------------------------------------------------- diff --git a/include/genn/genn/customUpdate.h b/include/genn/genn/customUpdate.h index 5c391a4ce6..d8bed255c6 100644 --- a/include/genn/genn/customUpdate.h +++ b/include/genn/genn/customUpdate.h @@ -60,7 +60,7 @@ class GENN_EXPORT CustomUpdateBase // Validate names Utils::validateVarPopName(name, "Custom update"); Utils::validateVarPopName(updateGroupName, "Custom update group name"); - getCustomUpdateModel()->validateNames(); + getCustomUpdateModel()->validate(); } //------------------------------------------------------------------------ diff --git a/include/genn/genn/customUpdateModels.h b/include/genn/genn/customUpdateModels.h index 475aa40e17..066a0f8d68 100644 --- a/include/genn/genn/customUpdateModels.h +++ b/include/genn/genn/customUpdateModels.h @@ -43,7 +43,7 @@ class GENN_EXPORT Base : public Models::Base boost::uuids::detail::sha1::digest_type getHashDigest() const; //! Validate names of parameters etc - void validateNames() const; + void validate() const; }; //---------------------------------------------------------------------------- diff --git a/include/genn/genn/initSparseConnectivitySnippet.h b/include/genn/genn/initSparseConnectivitySnippet.h index 07226b25e1..de375aba7e 100644 --- a/include/genn/genn/initSparseConnectivitySnippet.h +++ b/include/genn/genn/initSparseConnectivitySnippet.h @@ -72,7 +72,7 @@ class GENN_EXPORT Base : public Snippet::Base boost::uuids::detail::sha1::digest_type getHashDigest() const; //! Validate names of parameters etc - void validateNames() const; + void validate() const; }; //---------------------------------------------------------------------------- diff --git a/include/genn/genn/initVarSnippet.h b/include/genn/genn/initVarSnippet.h index e82b4151b0..7d8385df2c 100644 --- a/include/genn/genn/initVarSnippet.h +++ b/include/genn/genn/initVarSnippet.h @@ -29,7 +29,7 @@ class GENN_EXPORT Base : public Snippet::Base boost::uuids::detail::sha1::digest_type getHashDigest() const; //! Validate names of parameters etc - using Snippet::Base::validateNames; + using Snippet::Base::validate; //! Does this var init snippet require kernel-based connectivity bool requiresKernel() const; diff --git a/include/genn/genn/models.h b/include/genn/genn/models.h index 29c5ae4281..ffe04b1c28 100644 --- a/include/genn/genn/models.h +++ b/include/genn/genn/models.h @@ -119,7 +119,7 @@ class GENN_EXPORT Base : public Snippet::Base void updateHash(boost::uuids::detail::sha1 &hash) const; //! Validate names of parameters etc - void validateNames() const; + void validate() const; }; diff --git a/include/genn/genn/neuronGroup.h b/include/genn/genn/neuronGroup.h index 4c9077c158..a917253851 100644 --- a/include/genn/genn/neuronGroup.h +++ b/include/genn/genn/neuronGroup.h @@ -208,7 +208,7 @@ class GENN_EXPORT NeuronGroup { // Validate names Utils::validateVarPopName(name, "Neuron group"); - getNeuronModel()->validateNames(); + getNeuronModel()->validate(); } //------------------------------------------------------------------------ diff --git a/include/genn/genn/neuronModels.h b/include/genn/genn/neuronModels.h index eeb5dedb75..9bfcffc968 100644 --- a/include/genn/genn/neuronModels.h +++ b/include/genn/genn/neuronModels.h @@ -67,7 +67,7 @@ class GENN_EXPORT Base : public Models::Base boost::uuids::detail::sha1::digest_type getHashDigest() const; //! Validate names of parameters etc - void validateNames() const; + void validate() const; }; //---------------------------------------------------------------------------- diff --git a/include/genn/genn/postsynapticModels.h b/include/genn/genn/postsynapticModels.h index 0bb69c7c99..3698da546f 100644 --- a/include/genn/genn/postsynapticModels.h +++ b/include/genn/genn/postsynapticModels.h @@ -37,7 +37,7 @@ class GENN_EXPORT Base : public Models::Base boost::uuids::detail::sha1::digest_type getHashDigest() const; //! Validate names of parameters etc - using Models::Base::validateNames; + using Models::Base::validate; }; //---------------------------------------------------------------------------- diff --git a/include/genn/genn/snippet.h b/include/genn/genn/snippet.h index 26857f2ee5..104025b950 100644 --- a/include/genn/genn/snippet.h +++ b/include/genn/genn/snippet.h @@ -215,7 +215,7 @@ class GENN_EXPORT Base } //! Validate names of parameters etc - void validateNames() const + void validate() const { Utils::validateParamNames(getParamNames()); Utils::validateVecNames(getDerivedParams(), "Derived parameter"); @@ -254,7 +254,7 @@ class Init : m_Snippet(snippet), m_Params(params) { // Validate names - getSnippet()->validateNames(); + getSnippet()->validate(); } //---------------------------------------------------------------------------- diff --git a/include/genn/genn/weightUpdateModels.h b/include/genn/genn/weightUpdateModels.h index fd18398e30..d5dd0e9dab 100644 --- a/include/genn/genn/weightUpdateModels.h +++ b/include/genn/genn/weightUpdateModels.h @@ -153,7 +153,7 @@ class GENN_EXPORT Base : public Models::Base boost::uuids::detail::sha1::digest_type getHashDigest() const; //! Validate names of parameters etc - void validateNames() const; + void validate() const; }; //---------------------------------------------------------------------------- diff --git a/src/genn/genn/customUpdateModels.cc b/src/genn/genn/customUpdateModels.cc index 6327da37dd..2d882a744b 100644 --- a/src/genn/genn/customUpdateModels.cc +++ b/src/genn/genn/customUpdateModels.cc @@ -18,10 +18,10 @@ boost::uuids::detail::sha1::digest_type CustomUpdateModels::Base::getHashDigest( return hash.get_digest(); } //---------------------------------------------------------------------------- -void CustomUpdateModels::Base::validateNames() const +void CustomUpdateModels::Base::validate() const { // Superclass - Models::Base::validateNames(); + Models::Base::validate(); Utils::validateVecNames(getVarRefs(), "Variable reference"); } diff --git a/src/genn/genn/initSparseConnectivitySnippet.cc b/src/genn/genn/initSparseConnectivitySnippet.cc index 1443e5f673..b1825e0b43 100644 --- a/src/genn/genn/initSparseConnectivitySnippet.cc +++ b/src/genn/genn/initSparseConnectivitySnippet.cc @@ -27,10 +27,10 @@ boost::uuids::detail::sha1::digest_type InitSparseConnectivitySnippet::Base::get return hash.get_digest(); } //---------------------------------------------------------------------------- -void InitSparseConnectivitySnippet::Base::validateNames() const +void InitSparseConnectivitySnippet::Base::validate() const { // Superclass - Snippet::Base::validateNames(); + Snippet::Base::validate(); Utils::validateVecNames(getRowBuildStateVars(), "Row building state variable"); Utils::validateVecNames(getColBuildStateVars(), "Column building state variable"); } diff --git a/src/genn/genn/models.cc b/src/genn/genn/models.cc index 0cccfacc8f..1e2c720de3 100644 --- a/src/genn/genn/models.cc +++ b/src/genn/genn/models.cc @@ -19,10 +19,10 @@ void Base::updateHash(boost::uuids::detail::sha1 &hash) const Utils::updateHash(getVars(), hash); } //---------------------------------------------------------------------------- -void Base::validateNames() const +void Base::validate() const { // Superclass - Snippet::Base::validateNames(); + Snippet::Base::validate(); Utils::validateVecNames(getVars(), "Variable"); } @@ -180,4 +180,4 @@ void Models::updateHash(const WUVarReference &v, boost::uuids::detail::sha1 &has Utils::updateHash(v.getTransposeTargetName(), hash); Utils::updateHash(v.getTransposeVarIndex(), hash); } -} \ No newline at end of file +} diff --git a/src/genn/genn/neuronModels.cc b/src/genn/genn/neuronModels.cc index 33206519c3..2ac61b923d 100644 --- a/src/genn/genn/neuronModels.cc +++ b/src/genn/genn/neuronModels.cc @@ -32,10 +32,10 @@ boost::uuids::detail::sha1::digest_type NeuronModels::Base::getHashDigest() cons return hash.get_digest(); } //---------------------------------------------------------------------------- -void NeuronModels::Base::validateNames() const +void NeuronModels::Base::validate() const { // Superclass - Models::Base::validateNames(); + Models::Base::validate(); Utils::validateVecNames(getAdditionalInputVars(), "Additional input variable"); } diff --git a/src/genn/genn/synapseGroup.cc b/src/genn/genn/synapseGroup.cc index d43b28d7cc..36fadc2b7b 100644 --- a/src/genn/genn/synapseGroup.cc +++ b/src/genn/genn/synapseGroup.cc @@ -441,8 +441,8 @@ SynapseGroup::SynapseGroup(const std::string &name, SynapseMatrixType matrixType { // Validate names Utils::validateVarPopName(name, "Synapse group"); - getWUModel()->validateNames(); - getPSModel()->validateNames(); + getWUModel()->validate(); + getPSModel()->validate(); // If connectivity is procedural if(m_MatrixType & SynapseMatrixConnectivity::PROCEDURAL) { diff --git a/src/genn/genn/weightUpdateModels.cc b/src/genn/genn/weightUpdateModels.cc index a419dbd1cd..7738805f6c 100644 --- a/src/genn/genn/weightUpdateModels.cc +++ b/src/genn/genn/weightUpdateModels.cc @@ -37,10 +37,10 @@ boost::uuids::detail::sha1::digest_type WeightUpdateModels::Base::getHashDigest( return hash.get_digest(); } //---------------------------------------------------------------------------- -void WeightUpdateModels::Base::validateNames() const +void WeightUpdateModels::Base::validate() const { // Superclass - Models::Base::validateNames(); + Models::Base::validate(); Utils::validateVecNames(getPreVars(), "Presynaptic variable"); Utils::validateVecNames(getPostVars(), "Presynaptic variable");