From 07ba032b0a83a253a40d979d6a0ef5bd013700b5 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Tue, 17 Jan 2017 19:02:44 -0500 Subject: [PATCH] auto-sync --- .../models/src/com/autsia/bracer/BracerParser.java | 13 +++++++++++-- .../com/autsia/bracer/test/BracerParserTest.java | 7 +++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/java_console/models/src/com/autsia/bracer/BracerParser.java b/java_console/models/src/com/autsia/bracer/BracerParser.java index ec9e5d56e4..ed2b4d9804 100644 --- a/java_console/models/src/com/autsia/bracer/BracerParser.java +++ b/java_console/models/src/com/autsia/bracer/BracerParser.java @@ -60,7 +60,7 @@ public class BracerParser { * correct * @since 3.0 */ - public void parse(String expression) throws ParseException { + public BracerParser parse(String expression) throws ParseException { /* cleaning stacks */ stackOperations.clear(); stackRPN.clear(); @@ -140,6 +140,7 @@ public class BracerParser { /* reverse stack */ Collections.reverse(stackRPN); + return this; } /** @@ -170,8 +171,16 @@ public class BracerParser { stackAnswer.push(token); } else if (isOperator(token)) { Double a = Double.valueOf(stackAnswer.pop()); - Double b = Double.valueOf(stackAnswer.pop()); boolean aBoolean = a.doubleValue() == 1.0; + + if (token.equals("!")) { + stackAnswer.push(String.valueOf(aBoolean ? "1" : "0")); + continue; + } + + if (stackAnswer.isEmpty()) + throw new IllegalStateException("While " + token + " and " + a); + Double b = Double.valueOf(stackAnswer.pop()); boolean bBoolean = b.doubleValue() == 1.0; switch (token) { case "+": diff --git a/java_console/models/src/com/autsia/bracer/test/BracerParserTest.java b/java_console/models/src/com/autsia/bracer/test/BracerParserTest.java index 743c4206af..748e26d2ea 100644 --- a/java_console/models/src/com/autsia/bracer/test/BracerParserTest.java +++ b/java_console/models/src/com/autsia/bracer/test/BracerParserTest.java @@ -109,6 +109,13 @@ public class BracerParserTest { @Test public void testBooleanNot2() throws Exception { + assertEquals("0", bracerParser.parse("! false").evaluate()); + assertEquals("0", bracerParser.parse("! 0").evaluate()); + assertEquals("0", bracerParser.parse("1 & not(false)").evaluate()); + assertEquals("0", bracerParser.parse("1 & (!(false))").evaluate()); +// assertEquals("0", bracerParser.parse("1 & !(0)").evaluate()); +// assertEquals("0", bracerParser.parse("1 & !(false)").evaluate()); + bracerParser.parse("1 & not(false)"); assertEquals("0", bracerParser.evaluate());// todo: this does not seem right assertEquals("1 not 0 &", bracerParser.getRusEfi()); // todo: this does not seem right