1 changed files with 131 additions and 0 deletions
@ -0,0 +1,131 @@ |
|||
/** |
|||
* Copyright © 2016-2024 The Thingsboard Authors |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
package org.thingsboard.script.api.tbel; |
|||
|
|||
import org.junit.jupiter.api.BeforeEach; |
|||
import org.junit.jupiter.api.Test; |
|||
|
|||
import java.util.List; |
|||
|
|||
import static org.assertj.core.api.Assertions.assertThat; |
|||
import static org.assertj.core.api.Assertions.assertThatThrownBy; |
|||
import static org.assertj.core.api.Assertions.within; |
|||
|
|||
public class TbelCfTsRollingArgTest { |
|||
|
|||
private final long ts = System.currentTimeMillis(); |
|||
|
|||
private TbelCfTsRollingArg rollingArg; |
|||
|
|||
@BeforeEach |
|||
void setUp() { |
|||
rollingArg = new TbelCfTsRollingArg( |
|||
new TbTimeWindow(ts - 30000, ts - 10, 10), |
|||
List.of( |
|||
new TbelCfTsDoubleVal(ts - 10, Double.NaN), |
|||
new TbelCfTsDoubleVal(ts - 20, 2.0), |
|||
new TbelCfTsDoubleVal(ts - 30, 8.0), |
|||
new TbelCfTsDoubleVal(ts - 40, Double.NaN), |
|||
new TbelCfTsDoubleVal(ts - 50, 3.0), |
|||
new TbelCfTsDoubleVal(ts - 60, 9.0), |
|||
new TbelCfTsDoubleVal(ts - 70, Double.NaN) |
|||
) |
|||
); |
|||
} |
|||
|
|||
@Test |
|||
void testMax() { |
|||
assertThat(rollingArg.max()).isEqualTo(9.0); |
|||
assertThat(rollingArg.max(false)).isNaN(); |
|||
} |
|||
|
|||
@Test |
|||
void testMin() { |
|||
assertThat(rollingArg.min()).isEqualTo(2.0); |
|||
assertThat(rollingArg.min(false)).isNaN(); |
|||
} |
|||
|
|||
@Test |
|||
void testMean() { |
|||
assertThat(rollingArg.mean()).isEqualTo(5.5); |
|||
assertThat(rollingArg.mean(false)).isNaN(); |
|||
} |
|||
|
|||
@Test |
|||
void testStd() { |
|||
assertThat(rollingArg.std()).isCloseTo(3.0413812651491097, within(0.001)); |
|||
assertThat(rollingArg.std(false)).isNaN(); |
|||
} |
|||
|
|||
@Test |
|||
void testMedian() { |
|||
assertThat(rollingArg.median()).isEqualTo(5.5); |
|||
assertThat(rollingArg.median(false)).isNaN(); |
|||
} |
|||
|
|||
@Test |
|||
void testCount() { |
|||
assertThat(rollingArg.count()).isEqualTo(4); |
|||
assertThat(rollingArg.count(false)).isEqualTo(7); |
|||
} |
|||
|
|||
@Test |
|||
void testLast() { |
|||
assertThat(rollingArg.last()).isEqualTo(9.0); |
|||
assertThat(rollingArg.last(false)).isNaN(); |
|||
} |
|||
|
|||
@Test |
|||
void testFirst() { |
|||
assertThat(rollingArg.first()).isEqualTo(2.0); |
|||
assertThat(rollingArg.first(false)).isNaN(); |
|||
} |
|||
|
|||
@Test |
|||
void testFirstAndLastWhenOnlyNaNAndIgnoreNaNIsFalse() { |
|||
assertThat(rollingArg.first()).isEqualTo(2.0); |
|||
rollingArg = new TbelCfTsRollingArg( |
|||
new TbTimeWindow(ts - 30000, ts - 10, 10), |
|||
List.of( |
|||
new TbelCfTsDoubleVal(ts - 10, Double.NaN), |
|||
new TbelCfTsDoubleVal(ts - 40, Double.NaN), |
|||
new TbelCfTsDoubleVal(ts - 70, Double.NaN) |
|||
) |
|||
); |
|||
assertThatThrownBy(rollingArg::first).isInstanceOf(IllegalArgumentException.class).hasMessage("Rolling argument values are empty."); |
|||
assertThatThrownBy(rollingArg::last).isInstanceOf(IllegalArgumentException.class).hasMessage("Rolling argument values are empty."); |
|||
} |
|||
|
|||
@Test |
|||
void testSum() { |
|||
assertThat(rollingArg.sum()).isEqualTo(22.0); |
|||
assertThat(rollingArg.sum(false)).isNaN(); |
|||
} |
|||
|
|||
@Test |
|||
void testEmptyValues() { |
|||
rollingArg = new TbelCfTsRollingArg(new TbTimeWindow(0, 10, 10), List.of()); |
|||
assertThatThrownBy(rollingArg::sum).isInstanceOf(IllegalArgumentException.class).hasMessage("Rolling argument values are empty."); |
|||
assertThatThrownBy(rollingArg::max).isInstanceOf(IllegalArgumentException.class).hasMessage("Rolling argument values are empty."); |
|||
assertThatThrownBy(rollingArg::min).isInstanceOf(IllegalArgumentException.class).hasMessage("Rolling argument values are empty."); |
|||
assertThatThrownBy(rollingArg::mean).isInstanceOf(IllegalArgumentException.class).hasMessage("Rolling argument values are empty."); |
|||
assertThatThrownBy(rollingArg::std).isInstanceOf(IllegalArgumentException.class).hasMessage("Rolling argument values are empty."); |
|||
assertThatThrownBy(rollingArg::median).isInstanceOf(IllegalArgumentException.class).hasMessage("Rolling argument values are empty."); |
|||
assertThatThrownBy(rollingArg::first).isInstanceOf(IllegalArgumentException.class).hasMessage("Rolling argument values are empty."); |
|||
assertThatThrownBy(rollingArg::last).isInstanceOf(IllegalArgumentException.class).hasMessage("Rolling argument values are empty."); |
|||
} |
|||
|
|||
} |
|||
Loading…
Reference in new issue