mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 08:44:20 +03:00
Строгое преобразование строк в числа
This commit is contained in:
parent
616afbc8c0
commit
c73844fd51
@ -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
|
||||||
|
@ -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)));
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user