/**
* 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.vtype;
import org.diirt.vtype.VMultiDouble;
import java.util.Arrays;
import org.diirt.datasource.ReadExpressionTester;
import static org.diirt.vtype.ValueFactory.*;
import static org.diirt.datasource.vtype.ExpressionLanguage.*;
import static java.time.Duration.*;
import java.time.Instant;
import static org.junit.Assert.*;
import org.junit.BeforeClass;
import org.junit.Test;
/**
*
* @author carcassi
*/
public class SynchronizedArrayTest {
@BeforeClass
public static void setUpClass() throws Exception {
DataTypeSupport.install();
}
@Test
public void missingValues() throws InterruptedException {
ReadExpressionTester exp = new ReadExpressionTester(synchronizedArrayOf(ofNanos(10), ofMillis(10), vDoubles(Arrays.asList("pv1","pv2","pv3","pv4","pv5"))));
Instant reference = Instant.now();
Instant secondPass = reference.plus(ofMillis(1));
Instant thirdPass = reference.plus(ofMillis(2));
// Set values
exp.writeValue("pv1", newVDouble(0.0, newTime(reference)));
exp.writeValue("pv1", newVDouble(1.0, newTime(secondPass)));
// Set values
exp.writeValue("pv2", newVDouble(0.0, newTime(reference)));
exp.writeValue("pv2", newVDouble(1.0, newTime(secondPass)));
exp.writeValue("pv2", newVDouble(2.0, newTime(thirdPass)));
// Set values
exp.writeValue("pv3", newVDouble(1.0, newTime(secondPass)));
exp.writeValue("pv3", newVDouble(2.0, newTime(thirdPass)));
// Set values
exp.writeValue("pv4", newVDouble(0.0, newTime(reference)));
exp.writeValue("pv4", newVDouble(2.0, newTime(thirdPass)));
// Set values
exp.writeValue("pv5", newVDouble(0.0, newTime(reference)));
VMultiDouble array = (VMultiDouble) exp.getValue();
assertEquals(0.0, array.getValues().get(0).getValue(), 0.0);
assertEquals(0.0, array.getValues().get(1).getValue(), 0.0);
assertNull(array.getValues().get(2));
assertEquals(0.0, array.getValues().get(3).getValue(), 0.0);
assertEquals(0.0, array.getValues().get(4).getValue(), 0.0);
}
@Test
public void reconstructArray() throws InterruptedException {
ReadExpressionTester exp = new ReadExpressionTester(synchronizedArrayOf(ofMillis(5), ofMillis(10), vDoubles(Arrays.asList("pv1","pv2","pv3","pv4","pv5"))));
Instant reference = Instant.now();
Instant future1 = reference.plus(ofMillis(1));
Instant past1 = reference.minus(ofMillis(1));
Instant past2 = reference.minus(ofMillis(2));
// Set values
exp.writeValue("pv1", newVDouble(0.0, newTime(reference)));
exp.writeValue("pv1", newVDouble(1.0, newTime(future1)));
// Set values
exp.writeValue("pv2", newVDouble(1.0, newTime(past2)));
exp.writeValue("pv2", newVDouble(1.0, newTime(past1)));
exp.writeValue("pv2", newVDouble(0.0, newTime(reference)));
// Set values
exp.writeValue("pv3", newVDouble(1.0, newTime(past1)));
exp.writeValue("pv3", newVDouble(0.0, newTime(reference)));
// Set values
exp.writeValue("pv4", newVDouble(0.0, newTime(reference)));
exp.writeValue("pv4", newVDouble(2.0, newTime(future1)));
// Set values
exp.writeValue("pv5", newVDouble(0.0, newTime(reference)));
VMultiDouble array = (VMultiDouble) exp.getValue();
assertEquals(0.0, array.getValues().get(0).getValue(), 0.0);
assertEquals(0.0, array.getValues().get(1).getValue(), 0.0);
assertEquals(0.0, array.getValues().get(2).getValue(), 0.0);
assertEquals(0.0, array.getValues().get(3).getValue(), 0.0);
assertEquals(0.0, array.getValues().get(4).getValue(), 0.0);
}
}