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);
     }
 }