Skip to content
This repository has been archived by the owner on Jan 5, 2021. It is now read-only.

Issue 3134 3149 broken effect functions 3.x #3155

Merged
merged 3 commits into from
Jul 3, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -315,9 +315,9 @@ class SExecExtensions {

def List<Step> effectFunctions(ExecutionFlow it) {
val funcs = new ArrayList<Step>()
funcs += referencedEffects
states.forEach( s | funcs += s.referencedEffects )
nodes.forEach( n | funcs += n.referencedEffects )
funcs += referencedEffects.filter[reachable]
states.forEach( s | funcs += s.referencedEffects.filter[reachable] )
nodes.forEach( n | funcs += n.referencedEffects.filter[reachable] )
return funcs
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
GeneratorModel for yakindu::c {
statechart UnreachableStates {
feature Outlet {
targetProject = "gtests"
targetFolder = "UnreachableStatesTest"
}
feature FunctionInlining {
inlineReactions = false
inlineEntryActions = false
inlineEnterSequences = false
inlineExitActions = false
inlineExitSequences = false
inlineChoices = false
inlineEntries = false
inlineEnterRegion = false
inlineExitRegion = false
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/** Generated by YAKINDU Statechart Tools code generator. */

#include "gtest/gtest.h"
#include "UnreachableStates.h"

#include "sc_timer_service.h"

#define SC_UNUSED(P) (void)P

static UnreachableStates statechart;


class UnreachableStatesTest : public ::testing::Test
{
public:
/* All operations from the SCTUnit test class. */
void test();
void setTimer(UnreachableStates* statechart, const sc_eventid evid, const sc_integer time_ms, const sc_boolean periodic);
void unsetTimer(UnreachableStates* handle, const sc_eventid evid);
protected:
sc_unit_timer_service_t timer_service;
virtual void SetUp();
};

static UnreachableStatesTest * tc;


void UnreachableStatesTest::SetUp()
{
unreachableStates_init(&statechart);
sc_timer_service_init(
&timer_service,
0,
(sc_run_cycle_fp) &unreachableStates_runCycle,
false,
200,
&statechart
);


tc = this;
}
void UnreachableStatesTest::test()
{
unreachableStates_enter(&statechart);
sc_timer_service_proceed_cycles(&timer_service, 1);
EXPECT_TRUE(unreachableStates_isStateActive(&statechart, UnreachableStates_main_region_A));
EXPECT_TRUE(!unreachableStates_isStateActive(&statechart, UnreachableStates_main_region_B));
EXPECT_TRUE(!unreachableStates_isStateActive(&statechart, UnreachableStates_main_region_C));
unreachableStates_exit(&statechart);
}

void UnreachableStatesTest::setTimer(UnreachableStates* statechart, const sc_eventid evid, const sc_integer time_ms, const sc_boolean periodic){
SC_UNUSED(statechart);
sc_timer_t timer;
sc_timer_init(&timer, time_ms, periodic, evid);
insert_timer(&(tc->timer_service), timer);
}

void UnreachableStatesTest::unsetTimer(UnreachableStates* handle, const sc_eventid evid){
SC_UNUSED(handle);
delete_task(&(tc->timer_service), find_time_event(&timer_service, evid));
}

TEST_F(UnreachableStatesTest, test) {
test();
}


30 changes: 30 additions & 0 deletions test-plugins/org.yakindu.sct.generator.c.test/model/test.sgen
Original file line number Diff line number Diff line change
Expand Up @@ -2096,4 +2096,34 @@ GeneratorModel for sctunit::c {
}

}

test UnreachableStates {

feature Outlet {
targetProject = "org.yakindu.sct.generator.c.test"
targetFolder = "gtests/UnreachableStatesTest"
libraryTargetFolder = "libraryTarget"
}

feature JUnitWrapper {
WrapToJUnit = true
}

feature FunctionInlining {
inlineReactions = false
inlineEntryActions = false
inlineExitActions = false
inlineEnterSequences = false
inlineExitSequences = false
inlineChoices = false
inlineEnterRegion = false
inlineExitRegion = false
inlineEntries = false
}

feature SGenModel{
GenerateSGen = true
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,8 @@
ValuedEventsTest.class,
TypeAliasTest.class,
StatemachineKeywords.class,
TimedTransitionsTest.class
TimedTransitionsTest.class,
UnreachableStatesTest.class
})
public class AllTests {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/** Generated by YAKINDU Statechart Tools code generator. */
package org.yakindu.sct.generator.c.test;

import org.junit.Before;
import org.junit.runner.RunWith;
import org.yakindu.sct.generator.c.gtest.GTest;
import org.yakindu.sct.generator.c.gtest.GTestRunner;
import org.yakindu.sct.generator.c.gtest.GTestHelper;

@GTest(
statechartBundle = "org.yakindu.sct.test.models",
sourceFile = "gtests/UnreachableStatesTest/UnreachableStatesTest.cc",
program = "gtests/UnreachableStatesTest/UnreachableStates",
model = "testmodels/SCTUnit/UnreachableStates.sct",
additionalFilesToCopy = {
"libraryTarget/sc_timer_service.c",
"libraryTarget/sc_timer_service.h"
},
additionalFilesToCompile = {
"UnreachableStates.c",
"sc_timer_service.c"
}
)
@RunWith(GTestRunner.class)
public class UnreachableStatesTest {

protected final GTestHelper helper = new GTestHelper(this);

@Before
public void setUp() {
helper.generate();
helper.compile();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
GeneratorModel for yakindu::cpp {
statechart UnreachableStates {
feature Outlet {
targetProject = "gtests"
targetFolder = "UnreachableStatesTest"
}
feature FunctionInlining {
inlineReactions = false
inlineEntryActions = false
inlineEnterSequences = false
inlineExitActions = false
inlineExitSequences = false
inlineChoices = false
inlineEntries = false
inlineEnterRegion = false
inlineExitRegion = false
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/** Generated by YAKINDU Statechart Tools code generator. */
#include <string>
#include "gtest/gtest.h"
#include "UnreachableStates.h"
#include "sc_runner.h"
#include "sc_types.h"

namespace {

UnreachableStates* statechart;



//! The timers are managed by a timer service. */
static SctUnitRunner * runner;

class UnreachableStatesTest : public ::testing::Test{
protected:
virtual void SetUp() {
statechart = new UnreachableStates();
statechart->init();
runner = new SctUnitRunner(
statechart,
false,
200
);
}
virtual void TearDown() {
delete statechart;
delete runner;
}
};


TEST_F(UnreachableStatesTest, test) {

statechart->enter();

runner->proceed_cycles(1);

EXPECT_TRUE(statechart->isStateActive(UnreachableStates::main_region_A));

EXPECT_TRUE(!statechart->isStateActive(UnreachableStates::main_region_B));

EXPECT_TRUE(!statechart->isStateActive(UnreachableStates::main_region_C));

statechart->exit();


}

}

29 changes: 29 additions & 0 deletions test-plugins/org.yakindu.sct.generator.cpp.test/model/test.sgen
Original file line number Diff line number Diff line change
Expand Up @@ -2091,4 +2091,33 @@ GeneratorModel for sctunit::cpp {
GenerateSGen = true
}
}

test UnreachableStates {

feature Outlet{
targetProject = targetProject
targetFolder = "gtests/UnreachableStatesTest"
libraryTargetFolder = "libraryTarget"
}

feature JUnitWrapper {
WrapToJUnit = true
}

feature FunctionInlining {
inlineReactions = false
inlineEntryActions = false
inlineExitActions = false
inlineEnterSequences = false
inlineExitSequences = false
inlineChoices = false
inlineEnterRegion = false
inlineExitRegion = false
inlineEntries = false
}

feature SGenModel {
GenerateSGen = true
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,8 @@
ValuedEventsTest.class,
TypeAliasTest.class,
StatemachineKeywords.class,
TimedTransitionsTest.class
TimedTransitionsTest.class,
UnreachableStatesTest.class
})
public class AllTests {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/** Generated by YAKINDU Statechart Tools code generator. */
package org.yakindu.sct.generator.cpp.test;

import org.junit.Before;
import org.junit.runner.RunWith;
import org.yakindu.sct.generator.c.gtest.GTest;
import org.yakindu.sct.generator.c.gtest.GTestRunner;
import org.yakindu.sct.generator.c.gtest.GTestHelper;
import org.yakindu.sct.generator.c.gtest.GTestHelper.Compiler;

@GTest(
statechartBundle = "org.yakindu.sct.test.models",
sourceFile = "gtests/UnreachableStatesTest/UnreachableStatesTest.cc",
program = "gtests/UnreachableStatesTest/UnreachableStates",
model = "testmodels/SCTUnit/UnreachableStates.sct",
additionalFilesToCopy = {
"libraryTarget/sc_runner.h",
"libraryTarget/sc_runner.cpp"
},
additionalFilesToCompile = {
"UnreachableStates.cpp",
"sc_runner.cpp"
}
)
@RunWith(GTestRunner.class)
public class UnreachableStatesTest {
protected final GTestHelper helper = new GTestHelper(this, Compiler.GPLUSPLUS);

@Before
public void setUp() {
helper.generate();
helper.compile();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2035,5 +2035,29 @@ GeneratorModel for yakindu::java {
inlineExitRegion = false
inlineEntries = false
}
}
}

statechart UnreachableStates {

feature Outlet {
targetProject = "org.yakindu.sct.generator.java.test"
targetFolder = "src-gen"
}

feature Naming {
basePackage = "org.yakindu.scr"
}

feature FunctionInlining {
inlineReactions = false
inlineEntryActions = false
inlineExitActions = false
inlineEnterSequences = false
inlineExitSequences = false
inlineChoices = false
inlineEnterRegion = false
inlineExitRegion = false
inlineEntries = false
}
}
}
16 changes: 16 additions & 0 deletions test-plugins/org.yakindu.sct.generator.java.test/model/test.sgen
Original file line number Diff line number Diff line change
Expand Up @@ -1130,4 +1130,20 @@ GeneratorModel for sctunit::java {
libraryTargetFolder = "src-gen"
}
}

test UnreachableStates {
feature Naming {
basePackage = "org.yakindu.sct.generator.java.test"
}

feature Outlet {
targetProject = "org.yakindu.sct.generator.java.test"
targetFolder = "test-gen"
}

feature StatechartNaming {
basePackage = "org.yakindu.scr"
libraryTargetFolder = "src-gen"
}
}
}
Loading