blob: 2ea8b8344a4d7562f65de2c1eb17e9c5e8e24dae [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2020 Boeing
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Boeing - initial API and implementation
**********************************************************************/
package org.eclipse.osee.ote.message.elements;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.osee.ote.message.data.HeaderData;
import org.eclipse.osee.ote.message.data.MemoryResource;
import org.junit.Assert;
import org.junit.Test;
/**
* @author Michael P. Masterson
*/
public class SignedIntegerElementTest {
@Test
public void test8bit() {
List<DiscreteElement<Byte>> uuts = new ArrayList<>();
final HeaderData hd1 = new HeaderData("test_data 1", new MemoryResource(new byte[64], 0, 64));
final HeaderData hd2 = new HeaderData("test_data 2", new MemoryResource(new byte[64], 2, 64));
final HeaderData hd3= new HeaderData("test_data 3", new MemoryResource(new byte[64], 0, 64));
final HeaderData hd4 = new HeaderData("test_data 4", new MemoryResource(new byte[64], 2, 64));
SignedInteger8Element element1 = new SignedInteger8Element(null, "Element1", hd1, 2, 0, 7);
SignedInteger8Element element2 = new SignedInteger8Element(null, "Element2", hd2, 0, 0, 7);
SignedInteger8Element element3 = new SignedInteger8Element(null, "Element3", hd3, 0, 3, 10);
SignedInteger8Element element4 = new SignedInteger8Element(null, "Element4", hd4, 0, 24, 31);
uuts.add(element1);
uuts.add(element2);
uuts.add(element3);
uuts.add(element4);
byte setVal = -128; // smallest value
byte expected = -128;
setAndCheck(uuts, setVal, expected);
// Largest value
setVal = 127;
expected = 127;
setAndCheck(uuts, setVal, expected);
// Set positive value but get negative
setVal = (byte) 0xFF;
expected = -1;
setAndCheck(uuts, setVal, expected);
}
@Test
public void test16bit() {
List<DiscreteElement<Short>> uuts = new ArrayList<>();
final HeaderData hd1 = new HeaderData("test_data 1", new MemoryResource(new byte[64], 0, 64));
final HeaderData hd2 = new HeaderData("test_data 2", new MemoryResource(new byte[64], 2, 64));
final HeaderData hd3= new HeaderData("test_data 3", new MemoryResource(new byte[64], 0, 64));
final HeaderData hd4= new HeaderData("test_data 4", new MemoryResource(new byte[64], 0, 64));
DiscreteElement<Short> element1 = new SignedInteger16Element(null, "Element1", hd1, 0, 16, 31);
DiscreteElement<Short> element2 = new SignedInteger16Element(null, "Element2", hd2, 0, 0, 15);
DiscreteElement<Short> element3 = new SignedInteger16Element(null, "Element3", hd3, 0, 2, 17);
DiscreteElement<Short> element4 = new SignedInteger16Element(null, "Element4", hd4, 2, 0, 15);
uuts.add(element1);
uuts.add(element2);
uuts.add(element3);
uuts.add(element4);
short setVal = -32768; // smallest value
short expected = -32768;
setAndCheck(uuts, setVal, expected);
// Largest value
setVal = 32767;
expected = 32767;
setAndCheck(uuts, setVal, expected);
// Set full scale positive value but get negative
setVal = (short) 0xFFFF;
expected = -1;
setAndCheck(uuts, setVal, expected);
}
@Test
public void test32bit() {
List<DiscreteElement<Integer>> uuts = new ArrayList<>();
final HeaderData hd1 = new HeaderData("test_data 1", new MemoryResource(new byte[64], 0, 64));
final HeaderData hd2 = new HeaderData("test_data 2", new MemoryResource(new byte[64], 2, 64));
final HeaderData hd3= new HeaderData("test_data 3", new MemoryResource(new byte[64], 0, 64));
final HeaderData hd4 = new HeaderData("test_data 4", new MemoryResource(new byte[64], 2, 64));
SignedInteger32Element element1 = new SignedInteger32Element(null, "Element1", hd1, 2, 0, 31);
SignedInteger32Element element2 = new SignedInteger32Element(null, "Element2", hd2, 0, 0, 31);
SignedInteger32Element element3 = new SignedInteger32Element(null, "Element3", hd3, 0, 4, 35);
SignedInteger32Element element4 = new SignedInteger32Element(null, "Element4", hd4, 0, 16, 47);
uuts.add(element1);
uuts.add(element2);
uuts.add(element3);
uuts.add(element4);
int setVal = Integer.MIN_VALUE; // smallest value
int expected = Integer.MIN_VALUE;
setAndCheck(uuts, setVal, expected);
// Largest value
setVal = Integer.MAX_VALUE;
expected = Integer.MAX_VALUE;
setAndCheck(uuts, setVal, expected);
// Set full scale positive value but get negative
setVal = 0xFFFFFFFF;
expected = -1;
setAndCheck(uuts, setVal, expected);
}
@Test
public void test64bit() {
List<DiscreteElement<Long>> uuts = new ArrayList<>();
final HeaderData hd1 = new HeaderData("test_data 1", new MemoryResource(new byte[64], 0, 64));
final HeaderData hd2 = new HeaderData("test_data 2", new MemoryResource(new byte[66], 2, 66));
final HeaderData hd3= new HeaderData("test_data 3", new MemoryResource(new byte[64], 0, 64));
final HeaderData hd4 = new HeaderData("test_data 4", new MemoryResource(new byte[66], 2, 66));
SignedInteger64Element element1 = new SignedInteger64Element(null, "Element1", hd1, 0, 0, 63);
SignedInteger64Element element2 = new SignedInteger64Element(null, "Element2", hd2, 0, 0, 63);
SignedInteger64Element element3 = new SignedInteger64Element(null, "Element3", hd3, 0, 5, 68);
SignedInteger64Element element4 = new SignedInteger64Element(null, "Element4", hd4, 0, 16, 79);
uuts.add(element1);
uuts.add(element2);
uuts.add(element3);
uuts.add(element4);
long setVal = Long.MIN_VALUE; // smallest value
long expected = Long.MIN_VALUE;
setAndCheck(uuts, setVal, expected);
// Largest value
setVal = Long.MAX_VALUE;
expected = Long.MAX_VALUE;
setAndCheck(uuts, setVal, expected);
setVal = 0;
expected = 0;
setAndCheck(uuts, setVal, expected);
setVal = 1;
expected = 1;
setAndCheck(uuts, setVal, expected);
// Set full scale positive value but get negative
setVal = 0xFFFFFFFFFFFFFFFFl;
expected = -1;
setAndCheck(uuts, setVal, expected);
}
private <T extends Comparable<T>> void setAndCheck(List<DiscreteElement<T>> uuts, T setVal, T expected) {
for (DiscreteElement<T> el : uuts) {
setAndCheck(el, setVal, expected);
}
}
private <T extends Comparable<T>> void setAndCheck(DiscreteElement<T> element1, T setVal, T expected) {
element1.setValue(setVal);
check(element1, expected);
}
private <T extends Comparable<T>> void check(DiscreteElement<T> e, T expectedVals) {
Assert.assertEquals(
String.format("corruption detect on %s: msb=%d, lsb=%d", e.getName(), e.getMsb(), e.getLsb()),
expectedVals, e.getValue());
}
}