Skip to content

Commit

Permalink
~ fix test failures, add assertions
Browse files Browse the repository at this point in the history
  • Loading branch information
kevinherron committed Sep 16, 2022
1 parent 683d1bc commit 631463c
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 20 deletions.
Expand Up @@ -606,6 +606,13 @@ public void encodeVariant(Variant variant) throws UaSerializationException {
} else if (OptionSetUInteger.class.isAssignableFrom(valueClass)) {
valueClass = ((OptionSetUInteger<?>) value).getValue().getClass();
optionSet = true;
} else if (Matrix.class.isAssignableFrom(valueClass)) {
Matrix m = (Matrix) value;
if (m.isNull()) {
buffer.writeByte(0);
return;
}
valueClass = ((Matrix) value).getBuiltinDataType().orElseThrow().getBackingClass();
}

int typeId = TypeUtil.getBuiltinTypeId(valueClass);
Expand Down
Expand Up @@ -28,18 +28,24 @@ public Matrix(@Nullable Object array) {
this.dimensions = ArrayUtil.getDimensions(array);
this.builtinDataType = BuiltinDataType.fromBackingClass(ArrayUtil.getType(flatArray));
}

assert flatArray == null || (dimensions.length > 1 && builtinDataType != null);
}

public Matrix(Object flatArray, int[] dimensions) {
this.flatArray = flatArray;
this.dimensions = dimensions;
this.builtinDataType = BuiltinDataType.fromBackingClass(ArrayUtil.getType(flatArray));

assert dimensions.length > 1 && builtinDataType != null;
}

public Matrix(Object flatArray, int[] dimensions, BuiltinDataType builtinDataType) {
this.flatArray = flatArray;
this.dimensions = dimensions;
this.builtinDataType = builtinDataType;

assert flatArray != null && dimensions.length > 1 && builtinDataType != null;
}

/**
Expand Down Expand Up @@ -87,15 +93,6 @@ public boolean isNotNull() {
return !isNull();
}

/**
* Create a Matrix containing a null value.
*
* @return a Matrix containing a null value.
*/
public static Matrix ofNull() {
return new Matrix(null);
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
Expand All @@ -115,11 +112,44 @@ public int hashCode() {

@Override
public String toString() {
return new StringJoiner(", ", Matrix.class.getSimpleName() + "{", "}")
StringJoiner joiner = new StringJoiner(", ", Matrix.class.getSimpleName() + "{", "}")
.add("builtinDataType=" + builtinDataType)
.add("dimensions=" + Arrays.toString(dimensions))
.add("flatArray=" + Arrays.toString((Object[]) flatArray))
.toString();
.add("dimensions=" + Arrays.toString(dimensions));

Class<?> clazz = ArrayUtil.getType(flatArray);

if (clazz.isPrimitive()) {
if (clazz == boolean.class) {
joiner.add("flatArray=" + Arrays.toString((boolean[]) flatArray));
} else if (clazz == byte.class) {
joiner.add("flatArray=" + Arrays.toString((byte[]) flatArray));
} else if (clazz == short.class) {
joiner.add("flatArray=" + Arrays.toString((short[]) flatArray));
} else if (clazz == int.class) {
joiner.add("flatArray=" + Arrays.toString((int[]) flatArray));
} else if (clazz == long.class) {
joiner.add("flatArray=" + Arrays.toString((long[]) flatArray));
} else if (clazz == float.class) {
joiner.add("flatArray=" + Arrays.toString((float[]) flatArray));
} else if (clazz == double.class) {
joiner.add("flatArray=" + Arrays.toString((double[]) flatArray));
} else {
joiner.add("flatArray=" + flatArray);
}
} else {
joiner.add("flatArray=" + Arrays.toString((Object[]) flatArray));
}

return joiner.toString();
}

/**
* Create a Matrix containing a null value.
*
* @return a Matrix containing a null value.
*/
public static Matrix ofNull() {
return new Matrix(null);
}

}
Expand Up @@ -15,6 +15,7 @@
import org.eclipse.milo.opcua.stack.core.BuiltinDataType;
import org.eclipse.milo.opcua.stack.core.encoding.TestEncodingContext;
import org.eclipse.milo.opcua.stack.core.types.builtin.ExtensionObject;
import org.eclipse.milo.opcua.stack.core.types.builtin.Matrix;
import org.eclipse.milo.opcua.stack.core.types.builtin.Variant;
import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger;
import org.eclipse.milo.opcua.stack.core.types.structured.ServiceCounterDataType;
Expand All @@ -36,11 +37,11 @@ public Object[][] getVariants() {
{new Variant("hello, world")},
{new Variant(42)},
{new Variant(new Integer[]{0, 1, 2, 3})},
{new Variant(new Integer[][]{{0, 1}, {2, 3}})},
{new Variant(new Matrix(new Integer[][]{{0, 1}, {2, 3}}))},
{new Variant(new Long[]{0L, 1L, 2L, 3L})},
{new Variant(new Long[][]{{0L, 1L}, {2L, 3L}})},
{new Variant(new Matrix(new Long[][]{{0L, 1L}, {2L, 3L}}))},
{new Variant(new UInteger[]{uint(0), uint(1), uint(2), uint(3)})},
{new Variant(new UInteger[][]{{uint(0), uint(1)}, {uint(2), uint(3)}})},
{new Variant(new Matrix(new UInteger[][]{{uint(0), uint(1)}, {uint(2), uint(3)}}))},
{new Variant(new Variant[]{new Variant(0), new Variant(1), new Variant(2)})}
};
}
Expand Down Expand Up @@ -77,14 +78,14 @@ public Object[][] getPrimitiveArrayVariants() {
{new Variant(new int[]{0, 1, 2, 3}),
new Variant(new Integer[]{0, 1, 2, 3})},

{new Variant(new int[][]{{0, 1}, {2, 3}}),
new Variant(new Integer[][]{{0, 1}, {2, 3}})},
{new Variant(new Matrix(new int[][]{{0, 1}, {2, 3}})),
new Variant(new Matrix(new Integer[][]{{0, 1}, {2, 3}}))},

{new Variant(new long[]{0L, 1L, 2L, 3L}),
new Variant(new Long[]{0L, 1L, 2L, 3L})},

{new Variant(new long[][]{{0L, 1L}, {2L, 3L}}),
new Variant(new Long[][]{{0L, 1L}, {2L, 3L}})}
{new Variant(new Matrix(new long[][]{{0L, 1L}, {2L, 3L}})),
new Variant(new Matrix(new Long[][]{{0L, 1L}, {2L, 3L}}))}
};
}

Expand Down
@@ -0,0 +1,28 @@
package org.eclipse.milo.opcua.stack.core.types.builtin;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

class MatrixTest {
private final int[][] primitiveInt2d = {{1, 2}, {3, 4}};
private final Integer[][] boxedInt2d = {{1, 2}, {3, 4}};

private final Matrix primitiveMatrix2d = new Matrix(primitiveInt2d);
private final Matrix boxedMatrix2d = new Matrix(boxedInt2d);

@Test
void matrixToString() {
assertEquals(
"Matrix{builtinDataType=Int32, dimensions=[2, 2], flatArray=[1, 2, 3, 4]}", primitiveMatrix2d.toString());
assertEquals(
"Matrix{builtinDataType=Int32, dimensions=[2, 2], flatArray=[1, 2, 3, 4]}", boxedMatrix2d.toString());
}

@Test
void matrixEquals() {
assertEquals(primitiveMatrix2d, new Matrix(primitiveInt2d));
assertEquals(boxedMatrix2d, new Matrix(boxedInt2d));
}

}

0 comments on commit 631463c

Please sign in to comment.