diff --git a/li.strolch.model/src/main/java/li/strolch/model/timedstate/StrolchTimedState.java b/li.strolch.model/src/main/java/li/strolch/model/timedstate/StrolchTimedState.java index bb0daa8a1..6d8cd0637 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/timedstate/StrolchTimedState.java +++ b/li.strolch.model/src/main/java/li/strolch/model/timedstate/StrolchTimedState.java @@ -207,8 +207,12 @@ public interface StrolchTimedState extends StrolchElement { ITimeVariable timeEvolution = getTimeEvolution(); long time = timeStamp.toInstant().toEpochMilli(); - if (keepLastValue && timeEvolution.getFutureValues(time).isEmpty()) - time = timeEvolution.getValueAt(time).getTime(); + if (keepLastValue && timeEvolution.getFutureValues(time).isEmpty()) { + ITimeValue valueAt = timeEvolution.getValueAt(time); + if (valueAt == null) + return false; + time = valueAt.getTime(); + } return !timeEvolution.removePastValues(time).isEmpty(); } diff --git a/li.strolch.model/src/test/java/li/strolch/model/timedstate/StrolchTimedStateTest.java b/li.strolch.model/src/test/java/li/strolch/model/timedstate/StrolchTimedStateTest.java index 07e801ce6..153e8e0c1 100644 --- a/li.strolch.model/src/test/java/li/strolch/model/timedstate/StrolchTimedStateTest.java +++ b/li.strolch.model/src/test/java/li/strolch/model/timedstate/StrolchTimedStateTest.java @@ -200,6 +200,14 @@ public class StrolchTimedStateTest { assertEquals(2, floatState.getTimeEvolution().getValues().size()); } + @Test + public void testTrimTimedState4() { + ZonedDateTime now = ZonedDateTime.now().truncatedTo(ChronoUnit.DAYS).minusDays(20); + FloatTimedState floatState = new FloatTimedState(STATE_FLOAT_ID, STATE_FLOAT_ID); + assertFalse(floatState.trim(now, true)); + assertFalse(floatState.trim(20)); + } + private static Set asSet(String value) { HashSet hashSet = new HashSet<>(); hashSet.add(new AString(value));