%description: Basic test for multi-stage initialization. Tests that initialize() gets called exactly once, and initialize(stage) gets called exactly numInitStages() times. %file: test.ned simple PlainInit { } simple ZeroStageInit { } simple OneStageInit { } simple TwoStageInit { } simple ThreeStageInit { } network Test { submodules: plainInit: PlainInit; zeroStageInit: ZeroStageInit; oneStageInit: OneStageInit; twoStageInit: TwoStageInit; threeStageInit: ThreeStageInit; } %file: test.cc #include using namespace omnetpp; namespace @TESTNAME@ { class PlainInit : public cSimpleModule { virtual void initialize() override {EV << "init " << getFullPath() << "\n";} }; class StagedInit : public cSimpleModule { virtual void initialize(int stage) override {EV << "init " << getFullPath() << " stage " << stage << "\n";} }; class ZeroStageInit : public StagedInit { virtual int numInitStages() const override {return 0;} }; class OneStageInit : public StagedInit { virtual int numInitStages() const override {return 1;} }; class TwoStageInit : public StagedInit { virtual int numInitStages() const override {return 2;} }; class ThreeStageInit : public StagedInit { virtual int numInitStages() const override {return 3;} }; Define_Module(PlainInit); Define_Module(ZeroStageInit); Define_Module(OneStageInit); Define_Module(TwoStageInit); Define_Module(ThreeStageInit); }; //namespace %contains: stdout Initializing... Initializing module Test, stage 0 Initializing module Test.plainInit, stage 0 init Test.plainInit Initializing module Test.oneStageInit, stage 0 init Test.oneStageInit stage 0 Initializing module Test.twoStageInit, stage 0 init Test.twoStageInit stage 0 Initializing module Test.threeStageInit, stage 0 init Test.threeStageInit stage 0 Initializing module Test.twoStageInit, stage 1 init Test.twoStageInit stage 1 Initializing module Test.threeStageInit, stage 1 init Test.threeStageInit stage 1 Initializing module Test.threeStageInit, stage 2 init Test.threeStageInit stage 2