Skip to content

Commit 974c0e5

Browse files
committed
JSON conversion to handle infinity
1 parent 897b6cb commit 974c0e5

File tree

4 files changed

+85
-16
lines changed

4 files changed

+85
-16
lines changed

epics-vtype/vtype-gson/src/main/java/org/epics/vtype/gson/GsonVTypeBuilder.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ else if(Double.valueOf(d).equals(Double.NEGATIVE_INFINITY)){
107107
return this;
108108
}
109109

110-
public GsonVTypeBuilder addIgnoreNaN(String string, double d) {
111-
if (!Double.isNaN(d)) {
110+
public GsonVTypeBuilder addIgnoreNaNAndInfinity(String string, double d) {
111+
if (!Double.isNaN(d) && !Double.isInfinite(d)) {
112112
jsonObject.addProperty(string, d);
113113
}
114114
return this;
@@ -156,12 +156,12 @@ public GsonVTypeBuilder addTime(Time time) {
156156

157157
public GsonVTypeBuilder addDisplay(Display display) {
158158
return add("display", new GsonVTypeBuilder()
159-
.addIgnoreNaN("lowAlarm", display.getAlarmRange().getMinimum())
160-
.addIgnoreNaN("highAlarm", display.getAlarmRange().getMaximum())
161-
.addIgnoreNaN("lowDisplay", display.getDisplayRange().getMinimum())
162-
.addIgnoreNaN("highDisplay", display.getDisplayRange().getMaximum())
163-
.addIgnoreNaN("lowWarning", display.getWarningRange().getMinimum())
164-
.addIgnoreNaN("highWarning", display.getWarningRange().getMaximum())
159+
.addIgnoreNaNAndInfinity("lowAlarm", display.getAlarmRange().getMinimum())
160+
.addIgnoreNaNAndInfinity("highAlarm", display.getAlarmRange().getMaximum())
161+
.addIgnoreNaNAndInfinity("lowDisplay", display.getDisplayRange().getMinimum())
162+
.addIgnoreNaNAndInfinity("highDisplay", display.getDisplayRange().getMaximum())
163+
.addIgnoreNaNAndInfinity("lowWarning", display.getWarningRange().getMinimum())
164+
.addIgnoreNaNAndInfinity("highWarning", display.getWarningRange().getMaximum())
165165
.add("units", display.getUnit())
166166
.addNullableObject("description", display.getDescription())
167167
.build());
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package org.epics.vtype.gson;
2+
3+
import com.google.gson.JsonObject;
4+
import org.junit.Test;
5+
import static org.junit.Assert.assertNotNull;
6+
import static org.junit.Assert.assertNull;
7+
8+
public class GsonVTypeBuilderTest {
9+
10+
@Test
11+
public void testAddIgnoreNanAndInfinity(){
12+
GsonVTypeBuilder gsonVTypeBuilder = new GsonVTypeBuilder();
13+
gsonVTypeBuilder.addIgnoreNaNAndInfinity("thisIsOk", 7.7);
14+
JsonObject jsonObject = gsonVTypeBuilder.build();
15+
assertNotNull(jsonObject.get("thisIsOk"));
16+
17+
gsonVTypeBuilder.addIgnoreNaNAndInfinity("thisIsOkToo", 42);
18+
jsonObject = gsonVTypeBuilder.build();
19+
assertNotNull(jsonObject.get("thisIsOkToo"));
20+
assertNotNull(jsonObject.get("thisIsOk"));
21+
22+
gsonVTypeBuilder.addIgnoreNaNAndInfinity("NaN", Double.NaN);
23+
gsonVTypeBuilder.build();
24+
assertNull(jsonObject.get("NaN"));
25+
26+
gsonVTypeBuilder.addIgnoreNaNAndInfinity("NegativeInfinity", Double.NEGATIVE_INFINITY);
27+
gsonVTypeBuilder.build();
28+
assertNull(jsonObject.get("NegativeInfinity"));
29+
30+
gsonVTypeBuilder.addIgnoreNaNAndInfinity("PositiveInfinity", Double.POSITIVE_INFINITY);
31+
gsonVTypeBuilder.build();
32+
assertNull(jsonObject.get("PositiveInfinity"));
33+
}
34+
}

epics-vtype/vtype-json/src/main/java/org/epics/vtype/json/JsonVTypeBuilder.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ else if(Double.valueOf(d).equals(Double.NEGATIVE_INFINITY)){
8989
return this;
9090
}
9191

92-
public JsonVTypeBuilder addIgnoreNaN(String string, double d) {
93-
if (!Double.isNaN(d)) {
92+
public JsonVTypeBuilder addIgnoreNaNAndInfinity(String string, double d) {
93+
if (!Double.isNaN(d) && !Double.isInfinite(d)) {
9494
builder.add(string, d);
9595
}
9696
return this;
@@ -141,12 +141,12 @@ public JsonVTypeBuilder addTime(Time time) {
141141

142142
public JsonVTypeBuilder addDisplay(Display display) {
143143
return add("display", new JsonVTypeBuilder()
144-
.addIgnoreNaN("lowAlarm", display.getAlarmRange().getMinimum())
145-
.addIgnoreNaN("highAlarm", display.getAlarmRange().getMaximum())
146-
.addIgnoreNaN("lowDisplay", display.getDisplayRange().getMinimum())
147-
.addIgnoreNaN("highDisplay", display.getDisplayRange().getMaximum())
148-
.addIgnoreNaN("lowWarning", display.getWarningRange().getMinimum())
149-
.addIgnoreNaN("highWarning", display.getWarningRange().getMaximum())
144+
.addIgnoreNaNAndInfinity("lowAlarm", display.getAlarmRange().getMinimum())
145+
.addIgnoreNaNAndInfinity("highAlarm", display.getAlarmRange().getMaximum())
146+
.addIgnoreNaNAndInfinity("lowDisplay", display.getDisplayRange().getMinimum())
147+
.addIgnoreNaNAndInfinity("highDisplay", display.getDisplayRange().getMaximum())
148+
.addIgnoreNaNAndInfinity("lowWarning", display.getWarningRange().getMinimum())
149+
.addIgnoreNaNAndInfinity("highWarning", display.getWarningRange().getMaximum())
150150
.add("units", display.getUnit())
151151
.addNullableObject("description", display.getDescription()));
152152
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.epics.vtype.json;
2+
3+
import org.junit.Test;
4+
5+
import javax.json.JsonObject;
6+
7+
import static org.junit.Assert.assertNotNull;
8+
import static org.junit.Assert.assertNull;
9+
10+
public class JsonVTypeBuilderTest {
11+
12+
@Test
13+
public void testAddIgnoreNanAndInfinity(){
14+
JsonVTypeBuilder jsonVTypeBuilder = new JsonVTypeBuilder();
15+
jsonVTypeBuilder.addIgnoreNaNAndInfinity("thisIsOk", 7.7);
16+
JsonObject jsonObject = jsonVTypeBuilder.build();
17+
assertNotNull(jsonObject.get("thisIsOk"));
18+
19+
jsonVTypeBuilder.addIgnoreNaNAndInfinity("thisIsOkToo", 42);
20+
jsonObject = jsonVTypeBuilder.build();
21+
assertNotNull(jsonObject.get("thisIsOkToo"));
22+
23+
jsonVTypeBuilder.addIgnoreNaNAndInfinity("NaN", Double.NaN);
24+
jsonObject = jsonVTypeBuilder.build();
25+
assertNull(jsonObject.get("NaN"));
26+
27+
jsonVTypeBuilder.addIgnoreNaNAndInfinity("NegativeInfinity", Double.NEGATIVE_INFINITY);
28+
jsonObject = jsonVTypeBuilder.build();
29+
assertNull(jsonObject.get("NegativeInfinity"));
30+
31+
jsonVTypeBuilder.addIgnoreNaNAndInfinity("PositiveInfinity", Double.POSITIVE_INFINITY);
32+
jsonObject = jsonVTypeBuilder.build();
33+
assertNull(jsonObject.get("PositiveInfinity"));
34+
}
35+
}

0 commit comments

Comments
 (0)