Skip to content
This repository was archived by the owner on Jul 2, 2020. It is now read-only.

Commit b94d38c

Browse files
authored
Merge pull request praalhans#34 from praalhans/develop
Make release v2.0.0-rc.3
2 parents 8aa6c09 + 217b543 commit b94d38c

29 files changed

+531
-124
lines changed

.idea/runConfigurations/Run_DaViz__Java__and_build_Frege_source__PowerShell_.xml

Lines changed: 0 additions & 10 deletions
This file was deleted.

.idea/runConfigurations/Run_DaViz__Java__and_build_Frege_source__Zsh_.xml

Lines changed: 0 additions & 10 deletions
This file was deleted.

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
# Changelog
22

3+
## [v0.2.0-rc.3](https://github.com/praalhans/DaViz/releases/tag/v0.2.0-rc.3)
4+
5+
Date: 03 Mar 2020
6+
7+
This pre-release do a fix in Tarry algorithm where it would fail to simulate in some cases.
8+
9+
### Fix
10+
11+
- [#33](https://github.com/praalhans/DaViz/pull/33) - Fix Tarry skipping some events on non-deterministic choices
12+
313
## [v0.2.0-rc.2](https://github.com/praalhans/DaViz/releases/tag/v0.2.0-rc.2)
414

515
Date: 29 Feb 2020

SimulationCore/src/com/aexiz/daviz/simulation/AbstractExecution.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@ public AbstractExecution(Simulation simulation, Configuration configuration) {
2323
this.configuration = configuration;
2424
}
2525

26-
public AbstractExecution(Simulation simulation, Execution parent) {
26+
public AbstractExecution(Simulation simulation, Execution parent, Event lastEvent) {
2727
this.simulation = simulation;
2828
this.parent = parent;
29+
this.lastEvent = lastEvent;
2930
}
3031

3132
public AbstractExecution(Simulation simulation) {

SimulationCore/src/com/aexiz/daviz/simulation/algorithm/AbstractBasicAlgorithm.java

Lines changed: 0 additions & 4 deletions
This file was deleted.

SimulationCore/src/com/aexiz/daviz/simulation/algorithm/AbstractControlAlgorithm.java

Lines changed: 0 additions & 4 deletions
This file was deleted.

SimulationCore/src/com/aexiz/daviz/simulation/algorithm/wave/tarry/TarryState.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
public class TarryState extends AbstractAlgorithmState {
1212
boolean hasToken;
1313
PropertyVisitor state;
14-
List<Channel> neighbors;
14+
private List<Channel> neighbors;
1515

1616
public TarryState(boolean hasToken, PropertyVisitor state, List<Channel> neighbors) {
1717
this.hasToken = hasToken;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package com.aexiz.daviz.simulation.algorithm;
22

3-
public abstract class AbstractFregeBasicAlgorithm extends AbstractBasicAlgorithm implements FregeAlgorithm {
3+
public abstract class AbstractFregeBasicAlgorithm extends AbstractAlgorithm implements FregeAlgorithm, BasicAlgorithm {
44

55
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
package com.aexiz.daviz.simulation.algorithm;
22

3-
public abstract class AbstractFregeControlAlgorithm extends AbstractControlAlgorithm implements FregeAlgorithm {
3+
public abstract class AbstractFregeControlAlgorithm extends AbstractAlgorithm implements FregeAlgorithm, BasicAlgorithm {
44
}

SimulationFrege/src/com/aexiz/daviz/simulation/algorithm/event/InternalEvent.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ protected InternalEvent clone(DefaultEvent to) {
3434
return tor;
3535
}
3636

37+
@Override
3738
public InternalEvent clone() {
3839
return clone(new InternalEvent());
3940
}

SimulationFrege/src/com/aexiz/daviz/simulation/algorithm/event/ReceiveEvent.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ protected ReceiveEvent clone(DefaultEvent to) {
4242
return tor;
4343
}
4444

45+
@Override
4546
public ReceiveEvent clone() {
4647
return clone(new ReceiveEvent());
4748
}

SimulationJava/src/com/aexiz/daviz/simulation/DefaultConfiguration.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ void load() {
1818
processState = new StateInformation[processes.length];
1919

2020
JavaAlgorithm algorithm = ((JavaAlgorithm) simulation.getAlgorithm());
21-
algorithm.setNetwork(simulation.getNetwork());
22-
algorithm.makeState();
21+
algorithm.makeState(simulation.getNetwork());
2322
for (int i = 0, processesLength = processes.length; i < processesLength; i++) {
2423
Node process = processes[i];
2524
processAlive[i] = true;

SimulationJava/src/com/aexiz/daviz/simulation/DefaultExecution.java

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,32 @@
11
package com.aexiz.daviz.simulation;
22

33
import com.aexiz.daviz.simulation.algorithm.JavaAlgorithm;
4-
import com.aexiz.daviz.simulation.algorithm.event.DefaultEvent;
54
import com.aexiz.daviz.simulation.algorithm.wave.tarry.Tarry;
65

76
import java.util.ArrayList;
87
import java.util.List;
98

109
public class DefaultExecution extends AbstractExecution {
10+
/**
11+
* The state is currently updated when requesting the next execution using {@link DefaultExecution#getNext(int)}
12+
* However, this method can be invoked multiple times for each step.
13+
* This flag was a quick and dirty solution to avoid updating the process space multiple times
14+
*/
15+
boolean isProcessSpaceUpdated;
16+
1117
public DefaultExecution(Simulation simulation, Configuration configuration) {
1218
super(simulation, configuration);
19+
isProcessSpaceUpdated = false;
1320
}
1421

15-
public DefaultExecution(Simulation simulation, Execution parent) {
16-
super(simulation, parent);
22+
public DefaultExecution(Simulation simulation, Execution parent, Event lastEvent) {
23+
super(simulation, parent, lastEvent);
24+
isProcessSpaceUpdated = false;
1725
}
1826

1927
public DefaultExecution(Simulation simulation) {
2028
super(simulation);
29+
isProcessSpaceUpdated = false;
2130
}
2231

2332
public DefaultExecution() {
@@ -37,6 +46,7 @@ private void loadSuccessor() {
3746
isInvariant();
3847
if (successors != null) return;
3948

49+
isProcessSpaceUpdated = false;
4050
successors = new ArrayList<>();
4151

4252
List<Event> possibleNextEvents = ((Tarry) simulation.getAlgorithm()).makePossibleNextEvents();
@@ -45,13 +55,9 @@ private void loadSuccessor() {
4555
event.setSimulation(simulation);
4656
event.setExecution(this);
4757

48-
DefaultExecution resultChoice = new DefaultExecution(simulation, this);
49-
resultChoice.lastEvent = event;
50-
successors.add(resultChoice);
58+
successors.add(new DefaultExecution(simulation, this, event));
5159
});
5260

53-
54-
5561
}
5662

5763
@Override
@@ -70,7 +76,7 @@ public boolean hasNext() {
7076
public Execution getNext(int index) {
7177
loadSuccessor();
7278
Execution nextExecution = super.getNext(index);
73-
((JavaAlgorithm)simulation.getAlgorithm()).updateProcessSpace(nextExecution.getLastEvent());
79+
updateProcessSpace(nextExecution);
7480
return nextExecution;
7581
}
7682

@@ -79,4 +85,11 @@ public int getNextCount() {
7985
loadSuccessor();
8086
return super.getNextCount();
8187
}
88+
89+
private void updateProcessSpace(Execution execution) {
90+
if (!isProcessSpaceUpdated) {
91+
((JavaAlgorithm) simulation.getAlgorithm()).updateProcessSpace(execution.getLastEvent());
92+
}
93+
isProcessSpaceUpdated = true;
94+
}
8295
}

SimulationJava/src/com/aexiz/daviz/simulation/DefaultNetwork.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
public class DefaultNetwork extends AbstractNetwork {
44
@Override
55
public void load() {
6-
super.initiateNodesIds();
6+
initiateNodesIds();
77
}
88
}

SimulationJava/src/com/aexiz/daviz/simulation/algorithm/AbstractJavaBasicAlgorithm.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,8 @@
1010
import java.util.HashMap;
1111
import java.util.Map;
1212

13-
public abstract class AbstractJavaBasicAlgorithm extends AbstractBasicAlgorithm implements JavaAlgorithm {
13+
public abstract class AbstractJavaBasicAlgorithm extends AbstractAlgorithm implements JavaAlgorithm, BasicAlgorithm {
1414
protected Map<Node, Information> processesSpace;
15-
protected Network network;
1615

1716
protected transient Event lastEvent;
1817

@@ -21,17 +20,12 @@ public AbstractJavaBasicAlgorithm() {
2120
}
2221

2322
@Override
24-
public void setNetwork(Network network) {
25-
this.network = network;
26-
}
27-
28-
@Override
29-
public void makeState() {
23+
public void makeState(Network network) {
3024
if (network == null) throw new Error("Algorithm does not know the network");
3125
if (!processesSpace.isEmpty()) {
3226
processesSpace = new HashMap<>();
3327
}
34-
makeInitialNodeStates();
28+
makeInitialNodeStates(network);
3529
}
3630

3731
@Override
@@ -45,5 +39,5 @@ public void updateProcessSpace(Event event) {
4539
processesSpace.put(event.getHappensAt(), event instanceof ResultEvent ? event.getResult() : event.getNextState());
4640
}
4741

48-
abstract protected void makeInitialNodeStates();
42+
abstract protected void makeInitialNodeStates(Network network);
4943
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
package com.aexiz.daviz.simulation.algorithm;
22

3-
public abstract class AbstractJavaControlAlgorithm extends AbstractControlAlgorithm implements JavaAlgorithm {
3+
public abstract class AbstractJavaControlAlgorithm extends AbstractAlgorithm implements JavaAlgorithm, BasicAlgorithm {
44
}

SimulationJava/src/com/aexiz/daviz/simulation/algorithm/JavaAlgorithm.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,11 @@
88
import java.util.List;
99

1010
public interface JavaAlgorithm extends Algorithm {
11-
void setNetwork(Network network);
12-
13-
void makeState();
11+
void makeState(Network network);
1412

1513
StateInformation getProcessSpace(Node node);
1614

1715
List<Event> makePossibleNextEvents();
1816

1917
void updateProcessSpace(Event event);
20-
2118
}

SimulationJava/src/com/aexiz/daviz/simulation/algorithm/event/DefaultEvent.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,10 @@ public abstract class DefaultEvent extends AbstractEvent implements Cloneable, E
99
super();
1010
}
1111

12-
@Override
13-
public abstract DefaultEvent clone();
14-
15-
protected DefaultEvent clone(DefaultEvent to) {
16-
super.clone(to);
17-
return to;
18-
}
19-
20-
static public Event load(Execution execution){
12+
static public Event load(Execution execution) {
2113
return null;
2214
}
15+
16+
@Override
17+
public abstract DefaultEvent clone();
2318
}

SimulationJava/src/com/aexiz/daviz/simulation/algorithm/event/InternalEvent.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,11 @@ public class InternalEvent extends DefaultEvent implements tInternalEvent {
99
super();
1010
}
1111

12-
@Override
13-
protected InternalEvent clone(DefaultEvent to) {
14-
super.clone(to);
15-
InternalEvent tor = (InternalEvent) to;
16-
tor.nextState = this.nextState;
17-
return tor;
18-
}
19-
2012
public InternalEvent clone() {
21-
return clone(new InternalEvent());
13+
InternalEvent clonedEvent = (InternalEvent) super.clone(new InternalEvent());
14+
clonedEvent.nextState = this.nextState;
15+
16+
return clonedEvent;
2217
}
2318

2419
@Override

SimulationJava/src/com/aexiz/daviz/simulation/algorithm/event/ReceiveEvent.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,13 @@ public ReceiveEvent(MessageInformation message, StateInformation nextState, Node
2020
this.happensAt = happensAt;
2121
}
2222

23-
@Override
24-
protected ReceiveEvent clone(DefaultEvent to) {
25-
super.clone(to);
26-
ReceiveEvent tor = (ReceiveEvent) to;
27-
tor.message = this.message;
28-
tor.nextState = this.nextState;
29-
tor.sender = this.sender;
30-
return tor;
31-
}
32-
3323
public ReceiveEvent clone() {
34-
return clone(new ReceiveEvent());
24+
ReceiveEvent clonedEvent = (ReceiveEvent) super.clone(new ReceiveEvent());
25+
clonedEvent.message = this.message;
26+
clonedEvent.nextState = this.nextState;
27+
clonedEvent.sender = this.sender;
28+
29+
return clonedEvent;
3530
}
3631

3732
@Override

SimulationJava/src/com/aexiz/daviz/simulation/algorithm/event/ResultEvent.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,6 @@ public ResultEvent(ResultInformation result, Node happensAt) {
1515
public ResultEvent() {
1616
}
1717

18-
@Override
19-
protected ResultEvent clone(DefaultEvent to) {
20-
super.clone(to);
21-
ResultEvent tor = (ResultEvent) to;
22-
tor.result = this.result;
23-
return tor;
24-
}
25-
2618
@Override
2719
public boolean hasResult() {
2820
return true;
@@ -35,7 +27,10 @@ public ResultInformation getResult() {
3527

3628
@Override
3729
public ResultEvent clone() {
38-
return clone(new ResultEvent());
30+
ResultEvent clonedEvent = (ResultEvent) super.clone(new ResultEvent());
31+
clonedEvent.result = this.result;
32+
33+
return clonedEvent;
3934
}
4035

4136
@Override

SimulationJava/src/com/aexiz/daviz/simulation/algorithm/event/SendEvent.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,14 @@ public SendEvent(MessageInformation message, StateInformation nextState, Node re
2121
this.happensAt = happensAt;
2222
}
2323

24-
@Override
25-
protected SendEvent clone(DefaultEvent to) {
26-
super.clone(to);
27-
SendEvent tor = (SendEvent) to;
28-
tor.message = this.message;
29-
tor.nextState = this.nextState;
30-
tor.receiver = this.receiver;
31-
return tor;
32-
}
33-
3424
@Override
3525
public SendEvent clone() {
36-
return clone(new SendEvent());
26+
SendEvent clonedEvent = (SendEvent) super.clone(new SendEvent());
27+
clonedEvent.message = this.message;
28+
clonedEvent.nextState = this.nextState;
29+
clonedEvent.receiver = this.receiver;
30+
31+
return clonedEvent;
3732
}
3833

3934
@Override

0 commit comments

Comments
 (0)