Skip to content

Commit 76f9949

Browse files
committed
improved error messages for wrongly provided dimensions
1 parent 1375642 commit 76f9949

File tree

2 files changed

+24
-17
lines changed

2 files changed

+24
-17
lines changed

src/main/java/org/tensorics/gson/adapters/TensorbackedGsonAdapter.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package org.tensorics.gson.adapters;
22

33
import com.google.common.annotations.VisibleForTesting;
4-
import com.google.common.collect.ImmutableList;
54
import com.google.common.collect.Iterables;
6-
import com.google.common.collect.Lists;
75
import com.google.gson.Gson;
86
import com.google.gson.TypeAdapter;
97
import com.google.gson.reflect.TypeToken;
@@ -14,7 +12,6 @@
1412
import org.tensorics.core.tensor.operations.TensorInternals;
1513
import org.tensorics.core.tensorbacked.Tensorbacked;
1614
import org.tensorics.core.tensorbacked.TensorbackedInternals;
17-
import org.tensorics.core.tensorbacked.Tensorbackeds;
1815

1916
import java.io.IOException;
2017
import java.util.List;
@@ -37,7 +34,7 @@ public void write(JsonWriter out, TB value) throws IOException {
3734
/*XXX: The context of the tensor will currently NOT be serialized! */
3835

3936
List<Class<?>> dimensions = TensorbackedInternals.dimensionListFrom(tensorbackedClass);
40-
Object nested = nested(value.tensor(), dimensions);
37+
Object nested = nestmap(value.tensor(), dimensions);
4138
if (nested instanceof Map) {
4239
TypeAdapter<Map<?, ?>> adapter = context.getAdapter(new TypeToken<Map<?, ?>>() {
4340
});
@@ -50,9 +47,12 @@ public void write(JsonWriter out, TB value) throws IOException {
5047
}
5148

5249
@VisibleForTesting
53-
static Object nested(Tensor<?> tensor, List<Class<?>> dimensions) {
54-
if (Tensorics.dimensionsOf(tensor).size() != dimensions.size()) {
55-
throw new IllegalArgumentException("Tensor dimension and provided dimension do not match!");
50+
static Object nestmap(Tensor<?> tensor, List<Class<?>> dimensions) {
51+
int tensorDimensionality = Tensorics.dimensionsOf(tensor).size();
52+
if (tensorDimensionality != dimensions.size()) {
53+
throw new IllegalArgumentException("Tensor dimensionality (" + tensorDimensionality +
54+
") and number of provided dimensions (" + dimensions.size() + ": " + dimensions +
55+
") do not match!");
5656
}
5757

5858
if (dimensions.isEmpty()) {
@@ -63,7 +63,7 @@ static Object nested(Tensor<?> tensor, List<Class<?>> dimensions) {
6363
Tensor<? extends Map<?, ?>> mappedOut = TensorInternals.mapOut(tensor).inDirectionOf(dimension);
6464

6565
List<Class<?>> remainingDimensions = dimensions.subList(0, dimensions.size() - 1);
66-
return nested(mappedOut, remainingDimensions);
66+
return nestmap(mappedOut, remainingDimensions);
6767
}
6868

6969
@Override

src/test/java/org/tensorics/gson/adapters/NestingTest.java

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,27 @@
55
import org.assertj.core.api.Assertions;
66
import org.junit.Test;
77
import org.tensorics.core.lang.Tensorics;
8-
import org.tensorics.core.tensor.ImmutableScalar;
98
import org.tensorics.core.tensor.Scalar;
109
import org.tensorics.core.tensor.Tensor;
1110
import org.tensorics.core.tensorbacked.AbstractTensorbacked;
1211
import org.tensorics.core.tensorbacked.TensorbackedInternals;
1312
import org.tensorics.core.tensorbacked.annotation.Dimensions;
1413

14+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
1515
import static org.tensorics.core.lang.Tensorics.at;
1616

1717
public class NestingTest {
1818

1919
@Test
20-
public void mapoutTensorWorks() {
20+
public void nestmapTensorWorks() {
2121
AnInheritedTensorbacked val = Tensorics.builderFor(AnInheritedTensorbacked.class)//
2222
.put(at("A", 1), 0.11)//
2323
.put(at("B", 1), 0.21)
2424
.put(at("A", 2), 0.12)//
2525
.put(at("B", 2), 0.22)
2626
.build();
2727

28-
Object nested = TensorbackedGsonAdapter.nested(val.tensor(), TensorbackedInternals.dimensionListFrom(AnInheritedTensorbacked.class));
28+
Object nested = TensorbackedGsonAdapter.nestmap(val.tensor(), TensorbackedInternals.dimensionListFrom(AnInheritedTensorbacked.class));
2929

3030
Assertions.assertThat(nested).isEqualTo(ImmutableMap.of(
3131
"A", ImmutableMap.of(1, 0.11, 2, 0.12), //
@@ -35,27 +35,34 @@ public void mapoutTensorWorks() {
3535

3636

3737
@Test
38-
public void mapoutScalarIsPlain() {
38+
public void nestmapScalarIsPlain() {
3939
Scalar<Double> scalar = Tensorics.scalarOf(0.33);
4040

41-
Object nested = TensorbackedGsonAdapter.nested(scalar, ImmutableList.of());
41+
Object nested = TensorbackedGsonAdapter.nestmap(scalar, ImmutableList.of());
4242
Assertions.assertThat(nested).isEqualTo(0.33);
4343
}
4444

4545
@Dimensions({String.class, Integer.class})
4646
public static class AnInheritedTensorbacked extends AbstractTensorbacked<Double> {
47-
4847
public AnInheritedTensorbacked(Tensor<Double> tensor) {
4948
super(tensor);
5049
}
51-
5250
}
5351

52+
/* XXX Is this the correct behaviour? */
5453
@Test
55-
public void mapoutEmptyTensorIsNull() {
54+
public void nestmapEmptyTensorIsNull() {
5655
Tensor<Object> empty = Tensorics.builder(String.class, Integer.class).build();
57-
Object nested = TensorbackedGsonAdapter.nested(empty, ImmutableList.of(String.class, Integer.class));
56+
Object nested = TensorbackedGsonAdapter.nestmap(empty, ImmutableList.of(String.class, Integer.class));
5857
Assertions.assertThat(nested).isNull();
5958
}
6059

60+
@Test
61+
public void nestmapWrongDimensionAmountThrows() {
62+
Tensor<Object> empty = Tensorics.builder(String.class, Integer.class).build();
63+
assertThatThrownBy(() -> TensorbackedGsonAdapter.nestmap(empty, ImmutableList.of(Integer.class)))//
64+
.isInstanceOf(IllegalArgumentException.class)
65+
.hasMessageContaining("do not match!");
66+
}
67+
6168
}

0 commit comments

Comments
 (0)