Строгое преобразование строк в числа

This commit is contained in:
Victor 2019-04-04 12:46:39 +03:00
parent 616afbc8c0
commit c73844fd51
3 changed files with 9 additions and 13 deletions

View File

@ -87,20 +87,12 @@ public final class StringValue implements Value {
@Override @Override
public int asInt() { public int asInt() {
try {
return Integer.parseInt(value); return Integer.parseInt(value);
} catch (NumberFormatException e) {
return 0;
}
} }
@Override @Override
public double asNumber() { public double asNumber() {
try {
return Double.parseDouble(value); return Double.parseDouble(value);
} catch (NumberFormatException e) {
return 0;
}
} }
@Override @Override

View File

@ -35,9 +35,12 @@ public class ParserTest {
BlockStatement program = assertExpression(input, expected); BlockStatement program = assertExpression(input, expected);
program.execute(); program.execute();
final Value actual = Variables.get("a"); final Value actual = Variables.get("a");
try {
assertEquals(expectedValue.asNumber(), actual.asNumber(), 0.001); assertEquals(expectedValue.asNumber(), actual.asNumber(), 0.001);
} catch (NumberFormatException nfe) {
assertEquals(expectedValue.asString(), actual.asString()); assertEquals(expectedValue.asString(), actual.asString());
} }
}
private static BlockStatement assertExpression(String input, Expression expected) { private static BlockStatement assertExpression(String input, Expression expected) {
return assertProgram("a = " + input, block(assign("a", expected))); return assertProgram("a = " + input, block(assign("a", expected)));

View File

@ -1,6 +1,7 @@
package com.annimon.ownlang.parser.ast; package com.annimon.ownlang.parser.ast;
import static com.annimon.ownlang.parser.ast.ASTHelper.*; import static com.annimon.ownlang.parser.ast.ASTHelper.*;
import com.annimon.ownlang.exceptions.VariableDoesNotExistsException;
import org.junit.Test; import org.junit.Test;
/** /**
@ -26,7 +27,7 @@ public class VariableExpressionTest {
assertValue(number(8), var("a").eval()); assertValue(number(8), var("a").eval());
} }
@Test(expected = RuntimeException.class) @Test(expected = VariableDoesNotExistsException.class)
public void testUnknownVariable() { public void testUnknownVariable() {
var("a").eval(); var("a").eval();
} }