You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by er...@apache.org on 2014/04/01 13:43:28 UTC

svn commit: r1583636 - in /lucene/dev/trunk/solr/core/src: java/org/apache/solr/analytics/accumulator/ java/org/apache/solr/analytics/expression/ java/org/apache/solr/analytics/request/ java/org/apache/solr/analytics/statistics/ test/org/apache/solr/an...

Author: erick
Date: Tue Apr  1 11:43:27 2014
New Revision: 1583636

URL: http://svn.apache.org/r1583636
Log:
SOLR-5488: Fix up test failures for Analytics Component. Runs clean locally.

Modified:
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/BasicAccumulator.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/FacetingAccumulator.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/expression/BaseExpression.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/request/AnalyticsStats.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/statistics/MinMaxStatsCollector.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/statistics/StatsCollectorSupplierFactory.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/AbstractAnalyticsStatsTest.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/expression/ExpressionTest.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/facet/FieldFacetExtrasTest.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/facet/FieldFacetTest.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/util/valuesource/FunctionTest.java

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/BasicAccumulator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/BasicAccumulator.java?rev=1583636&r1=1583635&r2=1583636&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/BasicAccumulator.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/BasicAccumulator.java Tue Apr  1 11:43:27 2014
@@ -18,8 +18,10 @@
 package org.apache.solr.analytics.accumulator;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
+import java.util.List;
 import java.util.Set;
 
 import org.apache.lucene.index.AtomicReaderContext;
@@ -35,6 +37,8 @@ import org.apache.solr.common.util.Named
 import org.apache.solr.schema.TrieDateField;
 import org.apache.solr.search.DocSet;
 import org.apache.solr.search.SolrIndexSearcher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Supplier;
 
@@ -42,6 +46,7 @@ import com.google.common.base.Supplier;
  * A <code>BasicAccumulator</code> manages the ValueCounters and Expressions without regard to Facets.
  */
 public class BasicAccumulator extends ValueAccumulator {
+  private static final Logger log = LoggerFactory.getLogger(BasicAccumulator.class);
   protected final SolrIndexSearcher searcher;
   protected final AnalyticsRequest request;
   protected final DocSet docs;
@@ -57,14 +62,16 @@ public class BasicAccumulator extends Va
     this.searcher = searcher;
     this.docs = docs;
     this.request = request;
-    statsCollectorArraySupplier = StatsCollectorSupplierFactory.create(searcher.getSchema(), request);
+    final List<ExpressionRequest> exRequests = new ArrayList<ExpressionRequest>(request.getExpressions()); // make a copy here
+    Collections.sort(exRequests);
+    log.info("Processing request '"+request.getName()+"'");
+    statsCollectorArraySupplier = StatsCollectorSupplierFactory.create(searcher.getSchema(), exRequests);
     statsCollectors = statsCollectorArraySupplier.get();
-    int size = request.getExpressions().size();
+    int size = exRequests.size();
     expressionNames = new String[size];
     expressionStrings = new String[size];
     int count = 0;
-    Collections.sort(request.getExpressions());
-    for (ExpressionRequest expRequest : request.getExpressions()) {
+    for (ExpressionRequest expRequest : exRequests) {
       expressionNames[count] = expRequest.getName();
       expressionStrings[count++] = expRequest.getExpressionString();
     }

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/FacetingAccumulator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/FacetingAccumulator.java?rev=1583636&r1=1583635&r2=1583636&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/FacetingAccumulator.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/FacetingAccumulator.java Tue Apr  1 11:43:27 2014
@@ -29,6 +29,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
+import java.util.TreeMap;
 
 import org.apache.lucene.index.AtomicReaderContext;
 import org.apache.lucene.search.Filter;
@@ -98,7 +99,7 @@ public class FacetingAccumulator extends
     List<RangeFacetRequest> rangeFreqs = request.getRangeFacets();
     List<QueryFacetRequest> queryFreqs = request.getQueryFacets();
 
-    this.fieldFacetExpressions = new LinkedHashMap<>(fieldFreqs.size());
+    this.fieldFacetExpressions = new TreeMap<>();
     this.rangeFacetExpressions = new LinkedHashMap<>(rangeFreqs.size());
     this.queryFacetExpressions = new LinkedHashMap<>(queryFreqs.size());
     this.fieldFacetCollectors = new LinkedHashMap<>(fieldFreqs.size());
@@ -120,8 +121,8 @@ public class FacetingAccumulator extends
       final SchemaField ff = fr.getField();
       final FieldFacetAccumulator facc = FieldFacetAccumulator.create(searcher, this, ff);
       facetAccumulators.add(facc);
-      fieldFacetExpressions.put(freq.getName(), new LinkedHashMap<String,Expression[]>() );
-      fieldFacetCollectors.put(freq.getName(), new LinkedHashMap<String,StatsCollector[]>());
+      fieldFacetExpressions.put(freq.getName(), new TreeMap<String, Expression[]>() );
+      fieldFacetCollectors.put(freq.getName(), new TreeMap<String,StatsCollector[]>());
     }
     /**
      * For each range and query facet request add a bucket to the corresponding

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/expression/BaseExpression.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/expression/BaseExpression.java?rev=1583636&r1=1583635&r2=1583636&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/expression/BaseExpression.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/expression/BaseExpression.java Tue Apr  1 11:43:27 2014
@@ -35,7 +35,10 @@ public class BaseExpression extends Expr
   }
   
   public Comparable getValue() {
-    return statsCollector.getStat(stat);
+    if(statsCollector.getStatsList().contains(stat)) {
+      return statsCollector.getStat(stat);
+    }
+    return null;
   }
 }
 /**

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/request/AnalyticsStats.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/request/AnalyticsStats.java?rev=1583636&r1=1583635&r2=1583636&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/request/AnalyticsStats.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/request/AnalyticsStats.java Tue Apr  1 11:43:27 2014
@@ -33,6 +33,8 @@ import org.apache.solr.common.util.Named
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.search.DocSet;
 import org.apache.solr.search.SolrIndexSearcher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Class which computes the set of {@link AnalyticsRequest}s.
@@ -43,6 +45,7 @@ public class AnalyticsStats {
   protected SolrIndexSearcher searcher;
   protected SolrQueryRequest req;
   protected AnalyticsStatisticsCollector statsCollector;
+  private static final Logger log = LoggerFactory.getLogger(AnalyticsStats.class);
   
   public AnalyticsStats(SolrQueryRequest req, DocSet docs, SolrParams params, AnalyticsStatisticsCollector statsCollector) {
     this.req = req;
@@ -69,6 +72,10 @@ public class AnalyticsStats {
       return res;
     }
     statsCollector.addRequests(requests.size());
+    
+    // Get filter to all docs
+    Filter filter = docs.getTopFilter();
+    
     // Computing each Analytics Request Seperately
     for( AnalyticsRequest areq : requests ){
       // The Accumulator which will control the statistics generation
@@ -84,7 +91,7 @@ public class AnalyticsStats {
           accumulator = FacetingAccumulator.create(searcher, docs, areq, req);
         }
       } catch (IOException e) {
-        System.err.println(e.getMessage());
+        log.warn("Analytics request '"+areq.getName()+"' failed", e);
         continue;
       }
 
@@ -96,7 +103,6 @@ public class AnalyticsStats {
       statsCollector.addQueries(((BasicAccumulator)accumulator).getNumQueries());
       
       // Loop through the documents returned by the query and add to accumulator
-      Filter filter = docs.getTopFilter();
       List<AtomicReaderContext> contexts = searcher.getTopReaderContext().leaves();
       for (int leafNum = 0; leafNum < contexts.size(); leafNum++) {
         AtomicReaderContext context = contexts.get(leafNum);

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/statistics/MinMaxStatsCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/statistics/MinMaxStatsCollector.java?rev=1583636&r1=1583635&r2=1583636&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/statistics/MinMaxStatsCollector.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/statistics/MinMaxStatsCollector.java Tue Apr  1 11:43:27 2014
@@ -74,7 +74,7 @@ public class MinMaxStatsCollector implem
     if (stat.equals("min")&&min!=null) {
       return (Comparable)min.toObject();
     }
-    if (stat.equals("max")&&min!=null) {
+    if (stat.equals("max")&&max!=null) {
       return (Comparable)max.toObject();
     }
     if (stat.equals("count")) {
@@ -83,7 +83,9 @@ public class MinMaxStatsCollector implem
     if (stat.equals("missing")) {
       return new Long(missingCount);
     }
+
     return null;
+//    throw new IllegalArgumentException("No stat named '"+stat+"' in this collector " + this);
   }
   
   public Set<String> getStatsList() {

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/statistics/StatsCollectorSupplierFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/statistics/StatsCollectorSupplierFactory.java?rev=1583636&r1=1583635&r2=1583636&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/statistics/StatsCollectorSupplierFactory.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/statistics/StatsCollectorSupplierFactory.java Tue Apr  1 11:43:27 2014
@@ -21,9 +21,11 @@ import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.TreeMap;
 
 import org.apache.lucene.queries.function.ValueSource;
 import org.apache.lucene.queries.function.valuesource.BytesRefFieldSource;
@@ -33,7 +35,6 @@ import org.apache.lucene.queries.functio
 import org.apache.lucene.queries.function.valuesource.LongFieldSource;
 import org.apache.lucene.search.FieldCache;
 import org.apache.solr.analytics.expression.ExpressionFactory;
-import org.apache.solr.analytics.request.AnalyticsRequest;
 import org.apache.solr.analytics.request.ExpressionRequest;
 import org.apache.solr.analytics.util.AnalyticsParams;
 import org.apache.solr.analytics.util.AnalyticsParsers;
@@ -67,10 +68,13 @@ import org.apache.solr.schema.TrieDouble
 import org.apache.solr.schema.TrieFloatField;
 import org.apache.solr.schema.TrieIntField;
 import org.apache.solr.schema.TrieLongField;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Supplier;
 
 public class StatsCollectorSupplierFactory {
+  private static final Logger log = LoggerFactory.getLogger(StatsCollectorSupplierFactory.class);
   
   // FunctionTypes
   final static int NUMBER_TYPE = 0;
@@ -83,18 +87,18 @@ public class StatsCollectorSupplierFacto
    * Builds a Supplier that will generate identical arrays of new StatsCollectors.
    * 
    * @param schema The Schema being used.
-   * @param request The AnalyticsRequest to generate a StatsCollector[] from.
+   * @param exRequests The expression requests to generate a StatsCollector[] from.
    * @return A Supplier that will return an array of new StatsCollector.
    */
   @SuppressWarnings("unchecked")
-  public static Supplier<StatsCollector[]> create(IndexSchema schema, AnalyticsRequest request) {
-    final Map<String, Set<String>> collectorStats =  new HashMap<>();
-    final Map<String, Set<Integer>> collectorPercs =  new HashMap<>();
-    final Map<String, ValueSource> collectorSources =  new HashMap<>();
+  public static Supplier<StatsCollector[]> create(IndexSchema schema, List<ExpressionRequest> exRequests ) {
+    final Map<String, Set<String>> collectorStats =  new TreeMap<>();
+    final Map<String, Set<Integer>> collectorPercs =  new TreeMap<>();
+    final Map<String, ValueSource> collectorSources =  new TreeMap<>();
     
     // Iterate through all expression request to make a list of ValueSource strings
     // and statistics that need to be calculated on those ValueSources.
-    for (ExpressionRequest expRequest : request.getExpressions()) {
+    for (ExpressionRequest expRequest : exRequests) {
       String statExpression = expRequest.getExpressionString();
       Set<String> statistics = getStatistics(statExpression);
       if (statistics == null) {
@@ -146,7 +150,11 @@ public class StatsCollectorSupplierFacto
           stats = new HashSet<>();
           collectorStats.put(source, stats);
         }
-        stats.add(stat);
+        if(AnalyticsParams.STAT_PERCENTILE.equals(stat)) {
+          stats.add(stat + "_"+ arguments[0]);
+        } else {
+          stats.add(stat);
+        }
       }
     }
     String[] keys = collectorStats.keySet().toArray(new String[0]);
@@ -168,7 +176,7 @@ public class StatsCollectorSupplierFacto
         if (percs!=null) {
           collectorPercs.put(builtString, percs);
         }
-        for (ExpressionRequest er : request.getExpressions()) {
+        for (ExpressionRequest er : exRequests) {
           er.setExpressionString(er.getExpressionString().replace(sourceStr, builtString));
         }
       }
@@ -182,6 +190,8 @@ public class StatsCollectorSupplierFacto
       };
     }
     
+    log.info("Stats objects: "+collectorStats.size()+" sr="+collectorSources.size()+" pr="+collectorPercs.size() );
+    
     // All information is stored in final arrays so that nothing 
     // has to be computed when the Supplier's get() method is called.
     final Set<String>[] statsArr = collectorStats.values().toArray(new Set[0]);

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/AbstractAnalyticsStatsTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/AbstractAnalyticsStatsTest.java?rev=1583636&r1=1583635&r2=1583636&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/AbstractAnalyticsStatsTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/AbstractAnalyticsStatsTest.java Tue Apr  1 11:43:27 2014
@@ -107,8 +107,8 @@ public class AbstractAnalyticsStatsTest 
         case DOUBLE:  return Double.parseDouble(val);
         case FLOAT:   return Float.parseFloat(val);
         case LONG:    return Long.parseLong(val);
-        case STRING:  return val;
-        case DATE:    return val;
+        case STRING:  assertTrue(rawResponse, val != null && val.length() > 0 ); return val;
+        case DATE:    assertTrue(rawResponse, val != null && val.length() > 0 ); return val;
       }
     } catch (Exception e) {
       e.printStackTrace();

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/expression/ExpressionTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/expression/ExpressionTest.java?rev=1583636&r1=1583635&r2=1583636&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/expression/ExpressionTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/expression/ExpressionTest.java Tue Apr  1 11:43:27 2014
@@ -20,7 +20,6 @@ package org.apache.solr.analytics.expres
 import com.google.common.collect.ObjectArrays;
 
 import org.apache.lucene.util.IOUtils;
-import org.apache.lucene.util.LuceneTestCase.BadApple;
 import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.analytics.AbstractAnalyticsStatsTest;
@@ -36,7 +35,6 @@ import java.util.ArrayList;
 import java.util.Scanner;
 
 @SuppressCodecs({"Lucene3x", "Lucene40", "Lucene41", "Lucene42", "Appending", "Asserting"})
-@BadApple(bugUrl = "https://issues.apache.org/jira/browse/SOLR-5302")
 public class ExpressionTest extends AbstractAnalyticsStatsTest {
   private static final String fileName = "/analytics/requestFiles/expressions.txt";
 

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/facet/FieldFacetExtrasTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/facet/FieldFacetExtrasTest.java?rev=1583636&r1=1583635&r2=1583636&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/facet/FieldFacetExtrasTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/facet/FieldFacetExtrasTest.java Tue Apr  1 11:43:27 2014
@@ -24,6 +24,7 @@ import java.util.Collections;
 import java.util.List;
 
 import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
+import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
 

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/facet/FieldFacetTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/facet/FieldFacetTest.java?rev=1583636&r1=1583635&r2=1583636&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/facet/FieldFacetTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/facet/FieldFacetTest.java Tue Apr  1 11:43:27 2014
@@ -18,17 +18,18 @@
 package org.apache.solr.analytics.facet;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
+import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.junit.Ignore;
 
 
 @SuppressCodecs({"Lucene3x","Lucene40","Lucene41","Lucene42","Appending","Asserting"})
-@Ignore // failing after https://issues.apache.org/jira/browse/SOLR-5685
 public class FieldFacetTest extends AbstractAnalyticsFacetTest{
   static String fileName = "/analytics/requestFiles/fieldFacets.txt";
 
@@ -390,8 +391,13 @@ public class FieldFacetTest extends Abst
       }
     }
     
-    assertU(commit()); 
-    setResponse(h.query(request(fileToStringArr(FieldFacetTest.class, fileName))));
+    assertU(commit());
+    String[] reqFacetParamas = fileToStringArr(FieldFacetTest.class, fileName);
+    String[] reqParamas = new String[reqFacetParamas.length + 2];
+    System.arraycopy(reqFacetParamas, 0, reqParamas, 0, reqFacetParamas.length);
+    reqParamas[reqFacetParamas.length] = "solr";
+    reqParamas[reqFacetParamas.length+1] = "asc";
+    setResponse(h.query(request(reqFacetParamas)));
   }
   
   @SuppressWarnings("unchecked")
@@ -1063,11 +1069,18 @@ public class FieldFacetTest extends Abst
   }
 
   private void checkStddevs(ArrayList<Double> list1, ArrayList<Double> list2) {
+    Collections.sort(list1);
+    Collections.sort(list2);
     for (int i = 0; i<list1.size(); i++) {
       if ((Math.abs(list1.get(i)-list2.get(i))<.00000000001) == false) {
-        assertEquals(getRawResponse(), list1.get(i), list2.get(i), 0.00000000001);
+        Assert.assertEquals(getRawResponse(), list1.get(i), list2.get(i), 0.00000000001);
       }
     }
   }
 
+  public static void assertEquals(String mes, Object actual, Object expected) {
+    Collections.sort((List<Comparable>) actual);
+    Collections.sort((List<Comparable>)  expected);
+    Assert.assertEquals(mes, actual, expected);
+  }
 }

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/util/valuesource/FunctionTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/util/valuesource/FunctionTest.java?rev=1583636&r1=1583635&r2=1583636&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/util/valuesource/FunctionTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/analytics/util/valuesource/FunctionTest.java Tue Apr  1 11:43:27 2014
@@ -90,6 +90,7 @@ public class FunctionTest extends Abstra
     double result = (Double)getStatResult("ar", "sum", VAL_TYPE.DOUBLE);
     double calculated = (Double)getStatResult("ar", "sumc", VAL_TYPE.DOUBLE);
     assertEquals(getRawResponse(), result, calculated, 0.0);
+    // TODO checfk why asserted 2times
     assertEquals(getRawResponse(), result, calculated, 0.0);
 
     result = (Double)getStatResult("ar", "mean", VAL_TYPE.DOUBLE);
@@ -170,24 +171,24 @@ public class FunctionTest extends Abstra
   
   @Test
   public void dateMathTest() throws Exception {
-    String result = (String)getStatResult("dmr", "median", VAL_TYPE.STRING);
-    String calculated = (String)getStatResult("dmr", "medianc", VAL_TYPE.STRING);
+    String result = (String)getStatResult("dmr", "median", VAL_TYPE.DATE);
+    String calculated = (String)getStatResult("dmr", "medianc", VAL_TYPE.DATE);
     assertEquals(getRawResponse(), result, calculated);
     
-    result = (String)getStatResult("dmr", "max", VAL_TYPE.STRING);
-    calculated = (String)getStatResult("dmr", "maxc", VAL_TYPE.STRING);
+    result = (String)getStatResult("dmr", "max", VAL_TYPE.DATE);
+    calculated = (String)getStatResult("dmr", "maxc", VAL_TYPE.DATE);
     assertEquals(getRawResponse(), result, calculated);
   }
   
   @Test
   public void constantDateTest() throws Exception { 
-    String result = (String)getStatResult("cdr", "median", VAL_TYPE.STRING);
-    String calculated = (String)getStatResult("cdr", "medianc", VAL_TYPE.STRING);
+    String result = (String)getStatResult("cdr", "median", VAL_TYPE.DATE);
+    String calculated = (String)getStatResult("cdr", "medianc", VAL_TYPE.DATE);
     assertEquals(getRawResponse(), result, calculated);
     assertEquals(getRawResponse(), result, calculated);
     
-    result = (String)getStatResult("cdr", "max", VAL_TYPE.STRING);
-    calculated = (String)getStatResult("cdr", "maxc", VAL_TYPE.STRING);
+    result = (String)getStatResult("cdr", "max", VAL_TYPE.DATE);
+    calculated = (String)getStatResult("cdr", "maxc", VAL_TYPE.DATE);
     assertEquals(getRawResponse(), result, calculated);
   }