summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-11-03 13:01:59 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2021-11-03 13:04:20 +0100
commit2d51d3b7785e18cda7e2ed212a11d191b729b7ef (patch)
treefa8d2ed1ba4b48c4eed65d550659fa4beef523a3 /searchlib
parente5bc78b971380cb1245e9c6a36c2b3ea0fe6eebf (diff)
Make StringValue symmetric so it can accept its output (toString) as input.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/BooleanValue.java3
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/DoubleValue.java1
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/StringValue.java6
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/Value.java2
-rw-r--r--searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java30
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();