diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-11-03 13:01:59 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-11-03 13:04:20 +0100 |
commit | 2d51d3b7785e18cda7e2ed212a11d191b729b7ef (patch) | |
tree | fa8d2ed1ba4b48c4eed65d550659fa4beef523a3 /searchlib | |
parent | e5bc78b971380cb1245e9c6a36c2b3ea0fe6eebf (diff) |
Make StringValue symmetric so it can accept its output (toString) as input.
Diffstat (limited to 'searchlib')
5 files changed, 34 insertions, 8 deletions
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/BooleanValue.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/BooleanValue.java index 1c68962c951..07710797ee2 100644 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/BooleanValue.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/BooleanValue.java @@ -1,9 +1,6 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.searchlib.rankingexpression.evaluation; -import com.yahoo.searchlib.rankingexpression.rule.Function; -import com.yahoo.searchlib.rankingexpression.rule.TruthOperator; - /** * A value which is either true or false. * In numerical context true is interpreted as 1 and false as 0. diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/DoubleValue.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/DoubleValue.java index eb808a5a4bd..c925873bd81 100644 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/DoubleValue.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/DoubleValue.java @@ -2,7 +2,6 @@ package com.yahoo.searchlib.rankingexpression.evaluation; import com.yahoo.searchlib.rankingexpression.rule.Function; -import com.yahoo.searchlib.rankingexpression.rule.TruthOperator; /** * A double value result of a ranking expression evaluation. diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/StringValue.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/StringValue.java index 331a0ac363a..2c2d5eead05 100644 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/StringValue.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/StringValue.java @@ -26,7 +26,7 @@ public class StringValue extends Value { } public StringValue(String value) { - this.value = value; + this.value = UnicodeUtilities.unquote(value); } @Override @@ -35,7 +35,7 @@ public class StringValue extends Value { /** Returns the hashcode of this, to enable strings to be encoded (with reasonable safely) as doubles for optimization */ @Override public double asDouble() { - return UnicodeUtilities.unquote(value).hashCode(); + return value.hashCode(); } @Override @@ -121,7 +121,7 @@ public class StringValue extends Value { @Override public String toString() { - return "\"" + value + "\""; + return UnicodeUtilities.quote(value, '"'); } @Override diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/Value.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/Value.java index c5ae3acb5c1..793a0516be3 100644 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/Value.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/Value.java @@ -113,7 +113,7 @@ public abstract class Value { else if (value.equals("false")) return new BooleanValue(false); else if (value.startsWith("\"") || value.startsWith("'")) - return new StringValue(UnicodeUtilities.unquote(value)); + return new StringValue(value); else if (value.startsWith("{")) return new TensorValue(Tensor.from(value)); else diff --git a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java index b769d07e77e..13e19ff4d35 100644 --- a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java +++ b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java @@ -14,6 +14,7 @@ import com.yahoo.tensor.Tensor; import org.junit.Test; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; /** @@ -25,6 +26,35 @@ public class EvaluationTestCase { private final double tolerance = 0.000001; + private void verifyStringValueToString(String s) { + s = '"' + s + '"'; + Value val = Value.parse(s); + assertTrue(val instanceof StringValue); + assertEquals(s, val.toString()); + } + + @Test + public void testStringValueToString() { + verifyStringValueToString(""); + verifyStringValueToString("something"); + verifyStringValueToString("needs \\\" escape"); + + verifyStringValueToString("\\\\"); + verifyStringValueToString("\\\""); + verifyStringValueToString("\\f"); + verifyStringValueToString("\\female"); + verifyStringValueToString("\\n"); + verifyStringValueToString("\\nude"); + verifyStringValueToString("\\r"); + verifyStringValueToString("fa\\rt"); + verifyStringValueToString("\\t"); + verifyStringValueToString("fe\\tish"); + verifyStringValueToString("\\f"); + verifyStringValueToString("\\\\hx"); + verifyStringValueToString("\\\\xx"); + verifyStringValueToString("\\\\x10081977"); + } + @Test public void testEvaluation() { EvaluationTester tester = new EvaluationTester(); |