`->sum(t | t.inta / t.intb)` generates non-compilable code
Opened this issue · 0 comments
maxkratz commented
Example GIPSL snippet:
package "gips.generic.scheduling"
import "platform:/resource/gips.scheduling.taskmodel/model/Taskmodel.ecore"
config {
solver := GLPK [home:="fu", license:="bar"];
timeLimit := true [value := 60.0];
randomSeed := true [value := 0];
presolve := true;
debugOutput := true;
}
rule runTaskInSlot {
root: Root {
-tasks -> t
-slots -> s
}
t: Task {
++ -runningon -> s
}
s: Slot
# t.^deadline >= s.^index
}
mapping t2s with runTaskInSlot;
constraint -> global {
0 == classes.Task->sum(t | t.duration / t.deadline)
}
Generated code:
@Override
protected double buildConstantRhs() {
return indexer.getObjectsOfType("Task").stream()
.map(type -> (Task) type)
.map(itr_0 -> itr_0.getDuration() / itr_0.getDeadline())
.reduce(0.0, (sum, value) -> sum + value);
}
Current workaround: Explicitly convert the first operand to double:
constraint -> global {
0 == classes.Task->sum(t | 1.0 * t.duration / t.deadline)
}