Skip to content

Commit 61c3c5d

Browse files
authored
Merge pull request #351 from vert-x3/issues/nan
Adding support for special doubles
2 parents 1df5131 + b8106c3 commit 61c3c5d

File tree

3 files changed

+28
-1
lines changed

3 files changed

+28
-1
lines changed

src/main/java/io/vertx/redis/client/Response.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,17 @@ default Number toNumber() {
9393
default @Nullable Double toDouble() {
9494
final String msg = toString();
9595
if (msg != null) {
96-
return Double.parseDouble(msg);
96+
switch (msg) {
97+
case "-nan":
98+
case "nan":
99+
return Double.NaN;
100+
case "inf":
101+
return Double.POSITIVE_INFINITY;
102+
case "-inf":
103+
return Double.NEGATIVE_INFINITY;
104+
default:
105+
return Double.parseDouble(msg);
106+
}
97107
}
98108
return null;
99109
}

src/main/java/io/vertx/redis/client/impl/ReadableBuffer.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,12 @@ Number readNumber(int end, NumericType type) {
113113
case DECIMAL:
114114
if (bytes.length == 3 && bytes[0] == 'i' && bytes[1] == 'n' && bytes[2] == 'f') {
115115
number = Double.POSITIVE_INFINITY;
116+
} else if (bytes.length == 3 && bytes[0] == 'n' && bytes[1] == 'a' && bytes[2] == 'n') {
117+
number = Double.NaN;
116118
} else if (bytes.length == 4 && bytes[0] == '-' && bytes[1] == 'i' && bytes[2] == 'n' && bytes[3] == 'f') {
117119
number = Double.NEGATIVE_INFINITY;
120+
} else if (bytes.length == 4 && bytes[0] == '-' && bytes[1] == 'n' && bytes[2] == 'a' && bytes[3] == 'n') {
121+
number = Double.NaN;
118122
} else {
119123
number = Double.parseDouble(new String(bytes, StandardCharsets.US_ASCII));
120124
}

src/test/java/io/vertx/test/redis/RedisClient7Test.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,4 +254,17 @@ public void testBooleanVarArgs(TestContext should) {
254254
});
255255
});
256256
}
257+
258+
@Test
259+
public void testNaN(TestContext should) {
260+
final Async test = should.async();
261+
final String key = makeKey();
262+
263+
client.send(cmd(EVAL).arg("return tostring(0/0)").arg(0))
264+
.onFailure(should::fail)
265+
.onSuccess(ok -> {
266+
should.assertTrue(Double.isNaN(ok.toDouble()));
267+
test.complete();
268+
});
269+
}
257270
}

0 commit comments

Comments
 (0)