Skip to content

Commit 6a00d6c

Browse files
authored
fix(toml): should use lowercase value for nan (#6638)
1 parent d9df5c7 commit 6a00d6c

File tree

3 files changed

+28
-3
lines changed

3 files changed

+28
-3
lines changed

toml/parse_test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1447,3 +1447,25 @@ readme = { }`;
14471447
assertEquals(actual, expected);
14481448
},
14491449
});
1450+
1451+
Deno.test({
1452+
name: "parse() handles NaN and inf",
1453+
fn() {
1454+
assertEquals(parse("value = nan").value, NaN);
1455+
assertEquals(parse("value = +nan").value, NaN);
1456+
assertEquals(parse("value = -nan").value, NaN);
1457+
assertEquals(parse("value = inf").value, Infinity);
1458+
assertEquals(parse("value = +inf").value, Infinity);
1459+
assertEquals(parse("value = -inf").value, -Infinity);
1460+
assertThrows(() => parse("value = NaN").value);
1461+
assertThrows(() => parse("value = +NaN").value);
1462+
assertThrows(() => parse("value = -NaN").value);
1463+
assertThrows(() => parse("value = Inf").value);
1464+
assertThrows(() => parse("value = +Inf").value);
1465+
assertThrows(() => parse("value = -Inf").value);
1466+
assertThrows(() => parse("value = nannan"));
1467+
assertThrows(() => parse("value = -nan_"));
1468+
assertThrows(() => parse("value = infinf"));
1469+
assertThrows(() => parse("value = -inf_"));
1470+
},
1471+
});

toml/stringify.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,9 @@ class Dumper {
191191
return `${this.#declaration(keys)}${JSON.stringify(value)}`;
192192
}
193193
#numberDeclaration(keys: string[], value: number): string {
194+
if (Number.isNaN(value)) {
195+
return `${this.#declaration(keys)}nan`;
196+
}
194197
switch (value) {
195198
case Infinity:
196199
return `${this.#declaration(keys)}inf`;

toml/stringify_test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,9 @@ reg = "/foo[bar]/"
187187
sf1 = inf
188188
sf2 = inf
189189
sf3 = -inf
190-
sf4 = NaN
191-
sf5 = NaN
192-
sf6 = NaN
190+
sf4 = nan
191+
sf5 = nan
192+
sf6 = nan
193193
data = [["gamma","delta"],[1,2]]
194194
hosts = ["alpha","omega"]
195195
bool = true

0 commit comments

Comments
 (0)