/** * Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT * All rights reserved. Use is subject to license terms. See LICENSE.TXT */ package org.diirt.datasource.sim; import java.util.Arrays; import java.util.List; import org.diirt.util.time.TimeInterval; import org.diirt.vtype.VDouble; import org.junit.Test; import static org.junit.Assert.*; import static org.hamcrest.CoreMatchers.*; import static java.time.Duration.*; import java.time.Instant; /** * Test simulated pv function names parsing * * @author carcassi */ public class NameParserTest { public NameParserTest() { } @Test public void testParameterParsing() { // A couple of correct combinations List<Object> parameters = NameParser.parseParameters("1.0,2.0"); assertThat(parameters, equalTo(Arrays.asList((Object) 1.0, 2.0))); parameters = NameParser.parseParameters("-1,.5, 23.25"); assertThat(parameters, equalTo(Arrays.asList((Object) (-1.0), 0.5, 23.25))); } @Test(expected=IllegalArgumentException.class) public void testError1() { NameParser.parseParameters("1.0 2.0"); } @Test(expected=IllegalArgumentException.class) public void testError2() { NameParser.parseParameters("1.O"); } @Test(expected=IllegalArgumentException.class) public void testError3() { NameParser.parseParameters("1.1.2"); } @Test(expected=IllegalArgumentException.class) public void testError4() { NameParser.parseFunction("test(1.0 2.0)"); } @Test(expected=IllegalArgumentException.class) public void testError5() { NameParser.parseFunction("test(1.O)"); } @Test(expected=IllegalArgumentException.class) public void testError6() { NameParser.parseFunction("test(1.1.2)"); } @Test(expected=IllegalArgumentException.class) public void testError7() { NameParser.parseFunction("test1.2"); } @Test public void testParsing() { // Couple of correct functions List<Object> parameters = NameParser.parseFunction("sine(1.0,2.0)"); assertThat(parameters, equalTo(Arrays.asList((Object) "sine", 1.0, 2.0))); parameters = NameParser.parseFunction("ramp(-1,.5, 23.25)"); assertThat(parameters, equalTo(Arrays.asList((Object) "ramp", -1.0, 0.5, 23.25))); parameters = NameParser.parseFunction("replay(\"test.xml\")"); assertThat(parameters, equalTo(Arrays.asList((Object) "replay", "test.xml"))); } @Test public void testRamp() { Ramp ramp = (Ramp) NameParser.createFunction("ramp(1.0, 10.0, 1.0, 1.0)"); assertThat(ramp.nextValue().getValue(), equalTo(1.0)); } @Test public void testSine() { Sine ramp = (Sine) NameParser.createFunction("sine(0.0, 10.0, 4.0, 1.0)"); assertEquals(5.0, ramp.nextValue().getValue(), 0.0001); assertEquals(10.0, ramp.nextValue().getValue(), 0.0001); assertEquals(5.0, ramp.nextValue().getValue(), 0.0001); assertEquals(0.0, ramp.nextValue().getValue(), 0.0001); } @Test public void testNoise() { Noise noise1 = (Noise) NameParser.createFunction("noise(0.0, 10.0, 1.0)"); Noise noise2 = (Noise) NameParser.createFunction("noise"); // Forces use of variables assertThat(noise1.nextValue().getAlarmName(), notNullValue()); assertThat(noise2.nextValue().getAlarmName(), notNullValue()); } @Test public void gaussianNoise() { GaussianNoise noise1 = (GaussianNoise) NameParser.createFunction("gaussianNoise(0.0, 10.0, 1.0)"); GaussianNoise noise2 = (GaussianNoise) NameParser.createFunction("gaussianNoise"); GaussianNoise noise3 = (GaussianNoise) NameParser.createFunction("gaussianNoise()"); // Forces use of variables assertThat(noise1.nextValue().getAlarmName(), notNullValue()); assertThat(noise2.nextValue().getAlarmName(), notNullValue()); } @Test public void replay() { Instant start = Instant.now(); Replay replay = (Replay) NameParser.createFunction("replay(\"./src/test/resources/org/diirt/datasource/replay/parse1.xml\")"); List<VDouble> values = replay.createValues(TimeInterval.after(ofMillis(1000), start)); assertThat(values.size(), equalTo(4)); // TODO Cannot recreate this test reliably on all machines // start = Instant.now(); // values = replay.createValues(TimeInterval.after(ofMillis(105), start)); // assertThat(values.size(), equalTo(2)); } }