CalculatedTimeSeriesGroovyDslInterruptionsTest.java
/*
* Copyright (c) 2024, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.timeseries.dsl;
import com.powsybl.computation.AbstractTaskInterruptionTest;
import com.powsybl.timeseries.*;
import com.powsybl.timeseries.ast.NodeCalcVisitors;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Timeout;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.threeten.extra.Interval;
import java.time.Duration;
/**
* @author Nicolas Rol {@literal <nicolas.rol at rte-france.com>}
*/
class CalculatedTimeSeriesGroovyDslInterruptionsTest extends AbstractTaskInterruptionTest {
ReadOnlyTimeSeriesStore store;
TimeSeriesNameResolver resolver;
String[] timeSeriesNames = {"foo", "bar", "baz", "toCache"};
double[] fooValues = new double[] {3d, 5d};
TimeSeriesIndex index = RegularTimeSeriesIndex.create(Interval.parse("2015-01-01T00:00:00Z/2015-07-20T00:00:00Z"), Duration.ofDays(200));
// Script to evaluate
String script = "ts['toCache'] = (timeSeries['foo'] < 4.0)" +
"+0".repeat(Math.max(0, NodeCalcVisitors.RECURSION_THRESHOLD + 1)) +
"\n" +
"""
for (int i = 0; i < 10; i++) {
sleep(500)
}
""" +
"ts['test'] = (timeSeries['toCache'] + timeSeries['toCache'] * 2.0)" +
"\n" +
"ts['testIterative'] = ts['test']" +
"+0".repeat(Math.max(0, NodeCalcVisitors.RECURSION_THRESHOLD + 1));
@BeforeEach
void setUp() {
// Time Series Store
store = new ReadOnlyTimeSeriesStoreCache(
TimeSeries.createDouble(timeSeriesNames[0], index, fooValues)
);
// TimeSeries name resolver
resolver = new FromStoreTimeSeriesNameResolver(store, 0);
}
@ParameterizedTest
@Timeout(10)
@Order(2)
@ValueSource(booleans = {false, true})
void test(boolean isDelayed) throws Exception {
testCancelLongTask(isDelayed, () -> CalculatedTimeSeriesDslLoader.find().load(script, store));
}
}