You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mrql.apache.org by fe...@apache.org on 2014/10/29 17:50:49 UTC
git commit: MRQL-57: Make floating-point literals to be double
instead of float
Repository: incubator-mrql
Updated Branches:
refs/heads/master fe2079e82 -> 6fbcad4b2
MRQL-57: Make floating-point literals to be double instead of float
Project: http://git-wip-us.apache.org/repos/asf/incubator-mrql/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mrql/commit/6fbcad4b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mrql/tree/6fbcad4b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mrql/diff/6fbcad4b
Branch: refs/heads/master
Commit: 6fbcad4b2a985ee47f2f064cdac8a210e917b879
Parents: fe2079e
Author: fegaras <fe...@cse.uta.edu>
Authored: Wed Oct 29 11:50:21 2014 -0500
Committer: fegaras <fe...@cse.uta.edu>
Committed: Wed Oct 29 11:50:21 2014 -0500
----------------------------------------------------------------------
core/src/main/java/org/apache/mrql/Compiler.gen | 2 +-
.../src/main/java/org/apache/mrql/Interpreter.gen | 18 ++++++++++++++----
core/src/main/java/org/apache/mrql/Printer.gen | 2 +-
.../main/java/org/apache/mrql/TypeInference.gen | 2 +-
.../test/java/org/apache/mrql/EvaluatorTest.java | 8 ++++----
core/src/test/java/org/apache/mrql/QueryTest.java | 4 +++-
6 files changed, 24 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mrql/blob/6fbcad4b/core/src/main/java/org/apache/mrql/Compiler.gen
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/mrql/Compiler.gen b/core/src/main/java/org/apache/mrql/Compiler.gen
index a676d81..8dec3d6 100644
--- a/core/src/main/java/org/apache/mrql/Compiler.gen
+++ b/core/src/main/java/org/apache/mrql/Compiler.gen
@@ -363,7 +363,7 @@ final public class Compiler extends Translator {
else if (e.is_long())
return "(new MR_int("+((LongLeaf)e).value()+"))";
else if (e.is_double())
- return "(new MR_float("+((DoubleLeaf)e).value()+"))";
+ return "(new MR_double("+((DoubleLeaf)e).value()+"))";
else if (e.is_string())
return "(new MR_string("+e.toString()+"))";
match e {
http://git-wip-us.apache.org/repos/asf/incubator-mrql/blob/6fbcad4b/core/src/main/java/org/apache/mrql/Interpreter.gen
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/mrql/Interpreter.gen b/core/src/main/java/org/apache/mrql/Interpreter.gen
index 86a36f7..4319654 100644
--- a/core/src/main/java/org/apache/mrql/Interpreter.gen
+++ b/core/src/main/java/org/apache/mrql/Interpreter.gen
@@ -265,7 +265,7 @@ public class Interpreter extends TypeInference {
} else if (e.is_long())
return new MR_int((int)e.longValue());
else if (e.is_double())
- return new MR_float((float)e.doubleValue());
+ return new MR_double(e.doubleValue());
else if (e.is_string())
return new MR_string(e.stringValue());
match e {
@@ -273,6 +273,14 @@ public class Interpreter extends TypeInference {
return (((MR_bool)evalE(x,env)).get()) ? evalE(y,env) : false_value;
case callM(or,_,`x,`y):
return (((MR_bool)evalE(x,env)).get()) ? true_value : evalE(y,env);
+ case callM(coerce,_,`x,`n):
+ if (!x.is_long() || n.longValue() != MRContainer.LONG)
+ fail;
+ return new MR_long(x.longValue());
+ case callM(coerce,_,`x,`n):
+ if (!x.is_double() || n.longValue() != MRContainer.FLOAT)
+ fail;
+ return new MR_float((float)x.doubleValue());
case callM(`f,`n,...args): // internal function call
MRData[] as = new MRData[args.length()];
for ( int i = 0; i < args.length(); i++ )
@@ -432,14 +440,16 @@ public class Interpreter extends TypeInference {
MRData nv = evalE(n,env);
final int k = (int)((MR_int)nv).get();
if (k < 0)
- throw new Error("Negative list index: "+k);
+ throw new Error("Negative list index: "+k+" (in "+print_query(x)+")");
if (xv instanceof MR_dataset) {
List<MRData> res = ((MR_dataset)xv).dataset().take(k+1);
if (k >= res.size())
- throw new Error("List index out of bounds: "+k);
+ throw new Error("List index out of bounds: "+k+" (in "+print_query(x)+" of size "+res.size()+")");
return res.get(k);
};
Bag b = (Bag)xv;
+ if (k >= b.size())
+ throw new Error("List index out of bounds: "+k+" (in "+print_query(x)+" of size "+b.size()+")");
return b.get(k);
case range(`x,`i,`j):
MRData xv = evalE(x,env);
@@ -448,7 +458,7 @@ public class Interpreter extends TypeInference {
int ki = (int)((MR_int)ni).get();
int kj = (int)((MR_int)nj).get();
if (ki < 0 || kj < ki)
- throw new Error("Wrong list range: ["+ki+","+kj+"]");
+ throw new Error("Wrong list range: ["+ki+","+kj+"] in "+print_query(x));
Iterator<MRData> it = (xv instanceof MR_dataset)
? ((MR_dataset)xv).dataset().take(kj+1).iterator()
: ((Bag)xv).iterator();
http://git-wip-us.apache.org/repos/asf/incubator-mrql/blob/6fbcad4b/core/src/main/java/org/apache/mrql/Printer.gen
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/mrql/Printer.gen b/core/src/main/java/org/apache/mrql/Printer.gen
index b21d94a..66cbec6 100644
--- a/core/src/main/java/org/apache/mrql/Printer.gen
+++ b/core/src/main/java/org/apache/mrql/Printer.gen
@@ -478,7 +478,7 @@ public class Printer {
case int: return #<typed(`(((MR_int)x).get()),`type)>;
case long: return #<typed(`((int)((MR_long)x).get()),`type)>;
case float: return #<typed(`(((MR_float)x).get()),`type)>;
- case double: return #<typed(`((float)(((MR_double)x).get())),`type)>;
+ case double: return #<typed(`(((MR_double)x).get()),`type)>;
};
throw new Error("wrong type: "+type);
}
http://git-wip-us.apache.org/repos/asf/incubator-mrql/blob/6fbcad4b/core/src/main/java/org/apache/mrql/TypeInference.gen
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/mrql/TypeInference.gen b/core/src/main/java/org/apache/mrql/TypeInference.gen
index 3b9edfe..11dea76 100644
--- a/core/src/main/java/org/apache/mrql/TypeInference.gen
+++ b/core/src/main/java/org/apache/mrql/TypeInference.gen
@@ -1341,7 +1341,7 @@ public class TypeInference extends Translator {
if (n.is_long())
return #<int>;
else if (n.is_double())
- return #<float>;
+ return #<double>;
else if (n.is_string())
return #<string>;
};
http://git-wip-us.apache.org/repos/asf/incubator-mrql/blob/6fbcad4b/core/src/test/java/org/apache/mrql/EvaluatorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/mrql/EvaluatorTest.java b/core/src/test/java/org/apache/mrql/EvaluatorTest.java
index aad3150..10e44ee 100644
--- a/core/src/test/java/org/apache/mrql/EvaluatorTest.java
+++ b/core/src/test/java/org/apache/mrql/EvaluatorTest.java
@@ -99,14 +99,14 @@ public abstract class EvaluatorTest extends TestCase {
public void testCore1Math() throws Exception {
assertEquals(1, ((MR_int) execute("min({1,2,3});")).get());
- assertEquals(3.4F, ((MR_float) execute("max({1.2,3.4});")).get());
+ assertEquals(3.4, ((MR_double) execute("max({1.2,3.4});")).get());
assertEquals((double) 1.0F, ((MR_double) execute("min({1.0 as double,4.8 as double});")).get());
assertEquals(3, ((MR_long) execute("count({1,2,3});")).get());
- assertEquals(((double) 1.2F + (double) 3.4F), ((MR_double) execute("sum({1.2,3.4});")).get());
+ assertEquals(1.2 + 3.4, ((MR_double) execute("sum({1.2,3.4});")).get());
assertEquals(2.0, ((MR_double) execute("avg({1,2,3});")).get());
- assertEquals(((double) 1.2F + (double) 3.4F) / 2, ((MR_double) execute("avg({1.2,3.4});")).get());
- assertEquals(((double) 1.3F + (double) 4.8F) / 2, ((MR_double) execute("avg({1.3 as double,4.8 as double});")).get());
+ assertEquals((1.2 + 3.4) / 2, ((MR_double) execute("avg({1.2,3.4});")).get());
+ assertEquals((1.3F + 4.8F) / 2, (float)((MR_double) execute("avg({1.3 as float,4.8 as float});")).get());
}
}
http://git-wip-us.apache.org/repos/asf/incubator-mrql/blob/6fbcad4b/core/src/test/java/org/apache/mrql/QueryTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/mrql/QueryTest.java b/core/src/test/java/org/apache/mrql/QueryTest.java
index 3186d89..4d53d13 100644
--- a/core/src/test/java/org/apache/mrql/QueryTest.java
+++ b/core/src/test/java/org/apache/mrql/QueryTest.java
@@ -264,6 +264,8 @@ public abstract class QueryTest extends TestCase {
Union t1 = (Union)v1;
Union t2 = (Union)v2;
return t1.tag() == t2.tag() && equal_value(t1.value(),t2.value());
- } else return v1.equals(v2);
+ } else if (v1 instanceof MR_double && v2 instanceof MR_double)
+ return (float)((MR_double)v1).get() == (float)((MR_double)v2).get();
+ else return v1.equals(v2);
}
}