/** * Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT * All rights reserved. Use is subject to license terms. See LICENSE.TXT */ package org.diirt.vtype; import static org.diirt.vtype.ValueFactory.alarmNone; import static org.diirt.vtype.ValueFactory.displayNone; import static org.diirt.vtype.ValueFactory.newAlarm; import static org.diirt.vtype.ValueFactory.newDisplay; import static org.diirt.vtype.ValueFactory.newTime; import static org.diirt.vtype.ValueFactory.newVDouble; import static org.diirt.vtype.ValueFactory.newVDoubleArray; import static org.diirt.vtype.ValueFactory.newVEnum; import static org.diirt.vtype.ValueFactory.newVEnumArray; import static org.diirt.vtype.ValueFactory.newVFloatArray; import static org.diirt.vtype.ValueFactory.newVInt; import static org.diirt.vtype.ValueFactory.newVIntArray; import static org.diirt.vtype.ValueFactory.newVNumberArray; import static org.diirt.vtype.ValueFactory.newVString; import static org.diirt.vtype.ValueFactory.timeNow; import static org.diirt.vtype.ValueUtil.colorFor; import static org.diirt.vtype.ValueUtil.displayHasValidDisplayLimits; import static org.diirt.vtype.ValueUtil.numericValueOf; import static org.diirt.vtype.ValueUtil.subArray; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.CoreMatchers.sameInstance; import static org.junit.Assert.assertThat; import java.awt.Color; import java.time.Instant; import java.util.Arrays; import org.diirt.util.array.ArrayDouble; import org.diirt.util.array.ArrayFloat; import org.diirt.util.array.ArrayInt; import org.diirt.util.array.ListInt; import org.diirt.util.array.ListNumber; import org.diirt.util.text.NumberFormats; import org.junit.Test; /** * * @author carcassi */ public class ValueUtilTest { public ValueUtilTest() { } @Test public void testTypeOf() { assertThat(ValueUtil.typeOf(newVString(null, alarmNone(), timeNow())), equalTo((Class) VString.class)); assertThat(ValueUtil.typeOf(newVDouble(Double.NaN, alarmNone(), timeNow(), displayNone())), equalTo((Class) VDouble.class)); } @Test public void displayEquals1() { assertThat(ValueUtil.displayEquals(displayNone(), displayNone()), equalTo(true)); Display display1 = newDisplay(0.0, 1.0, 2.0, "", NumberFormats.toStringFormat(), 8.0, 9.0, 10.0, 0.0, 10.0); assertThat(ValueUtil.displayEquals(display1, displayNone()), equalTo(false)); Display display2 = newDisplay(0.0, 1.0, 2.0, "", NumberFormats.toStringFormat(), 8.0, 9.0, 10.0, 0.0, 10.0); assertThat(ValueUtil.displayEquals(display1, display2), equalTo(true)); display2 = newDisplay(0.1, 1.0, 2.0, "", NumberFormats.toStringFormat(), 8.0, 9.0, 10.0, 0.0, 10.0); assertThat(ValueUtil.displayEquals(display1, display2), equalTo(false)); display2 = newDisplay(0.0, 1.1, 2.0, "", NumberFormats.toStringFormat(), 8.0, 9.0, 10.0, 0.0, 10.0); assertThat(ValueUtil.displayEquals(display1, display2), equalTo(false)); display2 = newDisplay(0.0, 1.0, 2.1, "", NumberFormats.toStringFormat(), 8.0, 9.0, 10.0, 0.0, 10.0); assertThat(ValueUtil.displayEquals(display1, display2), equalTo(false)); display2 = newDisplay(0.0, 1.0, 2.0, "a", NumberFormats.toStringFormat(), 8.0, 9.0, 10.0, 0.0, 10.0); assertThat(ValueUtil.displayEquals(display1, display2), equalTo(false)); display2 = newDisplay(0.0, 1.0, 2.0, "", NumberFormats.format(2), 8.0, 9.0, 10.0, 0.0, 10.0); assertThat(ValueUtil.displayEquals(display1, display2), equalTo(false)); display2 = newDisplay(0.0, 1.0, 2.0, "", NumberFormats.toStringFormat(), 8.1, 9.0, 10.0, 0.0, 10.0); assertThat(ValueUtil.displayEquals(display1, display2), equalTo(false)); display2 = newDisplay(0.0, 1.0, 2.0, "", NumberFormats.toStringFormat(), 8.0, 9.1, 10.0, 0.0, 10.0); assertThat(ValueUtil.displayEquals(display1, display2), equalTo(false)); display2 = newDisplay(0.0, 1.0, 2.0, "", NumberFormats.toStringFormat(), 8.0, 9.0, 10.1, 0.0, 10.0); assertThat(ValueUtil.displayEquals(display1, display2), equalTo(false)); display2 = newDisplay(0.0, 1.0, 2.0, "", NumberFormats.toStringFormat(), 8.0, 9.0, 10.0, 0.1, 10.0); assertThat(ValueUtil.displayEquals(display1, display2), equalTo(false)); display2 = newDisplay(0.0, 1.0, 2.0, "", NumberFormats.toStringFormat(), 8.0, 9.0, 10.0, 0.0, 10.1); assertThat(ValueUtil.displayEquals(display1, display2), equalTo(false)); } @Test public void numericValueOf1() { assertThat(numericValueOf(newVDouble(1.0)), equalTo(1.0)); assertThat(numericValueOf(newVInt(1, alarmNone(), timeNow(), displayNone())), equalTo(1.0)); assertThat(numericValueOf(newVEnum(1, Arrays.asList("ONE", "TWO", "THREE"), alarmNone(), timeNow())), equalTo(1.0)); assertThat(numericValueOf(newVDoubleArray(new ArrayDouble(1.0), alarmNone(), timeNow(), displayNone())), equalTo(1.0)); assertThat(numericValueOf(newVFloatArray(new ArrayFloat(1.0f), alarmNone(), timeNow(), displayNone())), equalTo(1.0)); assertThat(numericValueOf(newVIntArray(new ArrayInt(1), alarmNone(), timeNow(), displayNone())), equalTo(1.0)); assertThat(numericValueOf(newVEnumArray(new ArrayInt(1,0,2), Arrays.asList("ONE", "TWO", "THREE"), alarmNone(), timeNow())), equalTo(1.0)); } @Test public void displayHasValidDisplayLimits1() { assertThat(displayHasValidDisplayLimits(displayNone()), equalTo(false)); } @Test public void displayHasValidDisplayLimits2() { Display display1 = newDisplay(0.0, 1.0, 2.0, "", NumberFormats.toStringFormat(), 8.0, 9.0, 10.0, 0.0, 10.0); assertThat(displayHasValidDisplayLimits(display1), equalTo(true)); } @Test public void numericColumnOf1() { VTable data = ValueFactory.newVTable(Arrays.<Class<?>>asList(double.class, double.class), Arrays.asList("x", "y"), Arrays.<Object>asList(new ArrayDouble(1,2,3), new ArrayDouble(5,4,6))); assertThat(ValueUtil.numericColumnOf(data, null), equalTo(null)); assertThat(ValueUtil.numericColumnOf(data, "x"), equalTo((ListNumber) new ArrayDouble(1,2,3))); assertThat(ValueUtil.numericColumnOf(data, "y"), equalTo((ListNumber) new ArrayDouble(5,4,6))); } @Test(expected = IllegalArgumentException.class) public void numericColumnOf2() { VTable data = ValueFactory.newVTable(Arrays.<Class<?>>asList(double.class, String.class), Arrays.asList("x", "y"), Arrays.<Object>asList(new ArrayDouble(1,2,3), Arrays.asList("a", "b", "c"))); assertThat(ValueUtil.numericColumnOf(data, null), equalTo(null)); assertThat(ValueUtil.numericColumnOf(data, "x"), equalTo((ListNumber) new ArrayDouble(1,2,3))); ValueUtil.numericColumnOf(data, "y"); } @Test(expected = IllegalArgumentException.class) public void numericColumnOf3() { VTable data = ValueFactory.newVTable(Arrays.<Class<?>>asList(double.class, double.class), Arrays.asList("x", "y"), Arrays.<Object>asList(new ArrayDouble(1,2,3), new ArrayDouble(5,4,6))); ValueUtil.numericColumnOf(data, "z"); } @Test public void stringColumnOf1() { VTable data = ValueFactory.newVTable(Arrays.<Class<?>>asList(String.class, String.class), Arrays.asList("x", "y"), Arrays.<Object>asList(Arrays.asList("1", "2", "3"), Arrays.asList("a", "b", "c"))); assertThat(ValueUtil.stringColumnOf(data, null), equalTo(null)); assertThat(ValueUtil.stringColumnOf(data, "x"), equalTo(Arrays.asList("1", "2", "3"))); assertThat(ValueUtil.stringColumnOf(data, "y"), equalTo(Arrays.asList("a", "b", "c"))); } @Test(expected = IllegalArgumentException.class) public void stringColumnOf2() { VTable data = ValueFactory.newVTable(Arrays.<Class<?>>asList(double.class, String.class), Arrays.asList("x", "y"), Arrays.<Object>asList(new ArrayDouble(1,2,3), Arrays.asList("a", "b", "c"))); assertThat(ValueUtil.stringColumnOf(data, null), equalTo(null)); assertThat(ValueUtil.stringColumnOf(data, "y"), equalTo(Arrays.asList("a", "b", "c"))); ValueUtil.stringColumnOf(data, "x"); } @Test(expected = IllegalArgumentException.class) public void sttringColumnOf3() { VTable data = ValueFactory.newVTable(Arrays.<Class<?>>asList(double.class, String.class), Arrays.asList("x", "y"), Arrays.<Object>asList(new ArrayDouble(1,2,3), Arrays.asList("a", "b", "c"))); ValueUtil.stringColumnOf(data, "z"); } @Test public void colorFor1() { assertThat(colorFor(AlarmSeverity.NONE), equalTo(Color.GREEN.getRGB())); assertThat(colorFor(AlarmSeverity.MINOR), equalTo(Color.YELLOW.getRGB())); assertThat(colorFor(AlarmSeverity.MAJOR), equalTo(Color.RED.getRGB())); assertThat(colorFor(AlarmSeverity.INVALID), equalTo(Color.MAGENTA.getRGB())); assertThat(colorFor(AlarmSeverity.UNDEFINED), equalTo(Color.DARK_GRAY.getRGB())); } @Test public void highestSeverityOf1() { Alarm none = ValueFactory.alarmNone(); Alarm minor = ValueFactory.newAlarm(AlarmSeverity.MINOR, "Minor alarm"); Alarm otherMinor = ValueFactory.newAlarm(AlarmSeverity.MINOR, "Other minor alarm"); Alarm major = ValueFactory.newAlarm(AlarmSeverity.MAJOR, "Major alarm"); Alarm invalid = ValueFactory.newAlarm(AlarmSeverity.INVALID, "Invalid alarm"); Alarm undefined = ValueFactory.newAlarm(AlarmSeverity.UNDEFINED, "Undefined alarm"); assertThat(ValueUtil.highestSeverityOf(Arrays.<Object>asList(none, minor), false), sameInstance(minor)); assertThat(ValueUtil.highestSeverityOf(Arrays.<Object>asList(none, minor, otherMinor), false), sameInstance(minor)); assertThat(ValueUtil.highestSeverityOf(Arrays.<Object>asList(null, minor, otherMinor), false), sameInstance(minor)); assertThat(ValueUtil.highestSeverityOf(Arrays.<Object>asList(null, minor, otherMinor), true).getAlarmSeverity(), sameInstance(AlarmSeverity.UNDEFINED)); assertThat(ValueUtil.highestSeverityOf(Arrays.<Object>asList(none, major, minor, otherMinor), false), sameInstance(major)); assertThat(ValueUtil.highestSeverityOf(Arrays.<Object>asList(none, major, minor, otherMinor, invalid), false), sameInstance(invalid)); assertThat(ValueUtil.highestSeverityOf(Arrays.<Object>asList(none, major, minor, undefined, invalid), false), sameInstance(undefined)); assertThat(ValueUtil.highestSeverityOf(Arrays.<Object>asList(none, major, minor, undefined, invalid, null), true), sameInstance(undefined)); } @Test public void latestTimeOf1() { Time time1 = newTime(Instant.ofEpochSecond(12340000, 0)); Time time2 = newTime(Instant.ofEpochSecond(12340000, 0)); Time time3 = newTime(Instant.ofEpochSecond(12350000, 0)); Time time4 = newTime(Instant.ofEpochSecond(12360000, 0)); assertThat(ValueUtil.latestTimeOf(Arrays.<Object>asList(time1, time3)), sameInstance(time3)); assertThat(ValueUtil.latestTimeOf(Arrays.<Object>asList(time3, time1)), sameInstance(time3)); assertThat(ValueUtil.latestTimeOf(Arrays.<Object>asList(time1, time2)), sameInstance(time1)); assertThat(ValueUtil.latestTimeOf(Arrays.<Object>asList(time2, time1)), sameInstance(time2)); assertThat(ValueUtil.latestTimeOf(Arrays.<Object>asList(time1, time4, time2, time3)), sameInstance(time4)); } @Test public void latestValidTimeOrNewOf1() { Time time1 = newTime(Instant.ofEpochSecond(12340000, 0)); Time time2 = newTime(Instant.ofEpochSecond(12340000, 0)); Time time3 = newTime(Instant.ofEpochSecond(12350000, 0)); Time time4 = newTime(Instant.ofEpochSecond(12360000, 0)); Time time5 = newTime(Instant.ofEpochSecond(12370000, 0), 1, false); assertThat(ValueUtil.latestValidTimeOrNowOf(Arrays.<Object>asList(time1, time3)), sameInstance(time3)); assertThat(ValueUtil.latestValidTimeOrNowOf(Arrays.<Object>asList(time3, time1)), sameInstance(time3)); assertThat(ValueUtil.latestValidTimeOrNowOf(Arrays.<Object>asList(time1, time2)), sameInstance(time1)); assertThat(ValueUtil.latestValidTimeOrNowOf(Arrays.<Object>asList(time2, time1)), sameInstance(time2)); assertThat(ValueUtil.latestValidTimeOrNowOf(Arrays.<Object>asList(time1, time4, time5, time3)), sameInstance(time4)); assertThat(ValueUtil.latestValidTimeOrNowOf(Arrays.<Object>asList(time5)), not(sameInstance(time5))); assertThat(ValueUtil.latestValidTimeOrNowOf(Arrays.<Object>asList(null, null)), not(nullValue())); } @Test public void subArray1() { VNumberArray array = newVNumberArray(new ArrayDouble(1,2,3,4,5), newAlarm(AlarmSeverity.MINOR, "LOW"), newTime(Instant.ofEpochSecond(123, 123)), displayNone()); VNumberArray selection = subArray(array, 2); assertThat(selection.getData(), equalTo((ListNumber) new ArrayDouble(3))); assertThat(selection.getSizes(), equalTo((ListInt) new ArrayInt(1))); assertThat(selection.getDimensionDisplay().get(0).getCellBoundaries(), equalTo((ListNumber) new ArrayDouble(2,3))); } }