From 492ddb9c75ea1f02a8a536bc7d18a10472c3ebc6 Mon Sep 17 00:00:00 2001
From: Martyn Gigg <martyn.gigg@stfc.ac.uk>
Date: Thu, 3 May 2012 11:14:03 +0100
Subject: [PATCH] Add a test to LogFilterTest Refs #5203

Needs debugging by Wendou for it to be turned on.
---
 .../Framework/Kernel/test/LogFilterTest.h     | 80 +++++++++++++++++--
 .../kernel/src/Exports/TimeSeriesProperty.cpp | 43 +++++++---
 2 files changed, 103 insertions(+), 20 deletions(-)

diff --git a/Code/Mantid/Framework/Kernel/test/LogFilterTest.h b/Code/Mantid/Framework/Kernel/test/LogFilterTest.h
index 49dc91276eb..e7afddc6e8d 100644
--- a/Code/Mantid/Framework/Kernel/test/LogFilterTest.h
+++ b/Code/Mantid/Framework/Kernel/test/LogFilterTest.h
@@ -70,34 +70,27 @@ public:
       flt.addFilter(&f);
 
       TS_ASSERT_EQUALS( flt.data()->size(), 6 );
-      std::cout << "flt.data() size = " << flt.data()->size() << std::endl;
 
-      std::cout << "0" << std::endl;
       TS_ASSERT_EQUALS( flt.data()->nthInterval(0).begin_str(), "2007-Nov-30 16:16:50" );
       TS_ASSERT_EQUALS( flt.data()->nthInterval(0).end_str(), "2007-Nov-30 16:17:00" );
       TS_ASSERT_EQUALS( flt.data()->nthValue(0), 1 );
 
-      std::cout << "1" << std::endl;
       TS_ASSERT_EQUALS( flt.data()->nthInterval(1).begin_str(), "2007-Nov-30 16:17:00" );
       TS_ASSERT_EQUALS( flt.data()->nthInterval(1).end_str(), "2007-Nov-30 16:17:10" );
       TS_ASSERT_EQUALS( flt.data()->nthValue(1), 1 );
 
-      std::cout << "2" << std::endl;
       TS_ASSERT_EQUALS( flt.data()->nthInterval(2).begin_str(), "2007-Nov-30 16:17:10" );
       TS_ASSERT_EQUALS( flt.data()->nthInterval(2).end_str(), "2007-Nov-30 16:17:20" );
       TS_ASSERT_EQUALS( flt.data()->nthValue(2), 2 );
 
-      std::cout << "3" << std::endl;
       TS_ASSERT_EQUALS( flt.data()->nthInterval(3).begin_str(), "2007-Nov-30 16:17:20" );
       TS_ASSERT_EQUALS( flt.data()->nthInterval(3).end_str(), "2007-Nov-30 16:17:25" );
       TS_ASSERT_EQUALS( flt.data()->nthValue(3), 3 );
 
-      std::cout << "4" << std::endl;
       TS_ASSERT_EQUALS( flt.data()->nthInterval(4).begin_str(), "2007-Nov-30 16:17:39" );
       TS_ASSERT_EQUALS( flt.data()->nthInterval(4).end_str(), "2007-Nov-30 16:17:40" );
       TS_ASSERT_EQUALS( flt.data()->nthValue(4), 4 );
 
-      std::cout << "5" << std::endl;
       TS_ASSERT_EQUALS( flt.data()->nthInterval(5).begin_str(), "2007-Nov-30 16:17:40" );
       TS_ASSERT_EQUALS( flt.data()->nthInterval(5).end_str(), "2007-Nov-30 16:17:41" );
       TS_ASSERT_EQUALS( flt.data()->nthValue(5), 5 );
@@ -189,6 +182,79 @@ public:
       return;
     }
 
+    void xtestFilterByPeriod() // Test for Wendou to look at
+    {
+      TimeSeriesProperty<double> height_log("height_log");
+      height_log.addValue("2008-Jun-17 11:10:44", -0.86526);
+      height_log.addValue("2008-Jun-17 11:10:45", -1.17843);
+      height_log.addValue("2008-Jun-17 11:10:47", -1.27995);
+      height_log.addValue("2008-Jun-17 11:20:15", -1.38216);
+      height_log.addValue("2008-Jun-17 11:20:16", -1.87435);
+      height_log.addValue("2008-Jun-17 11:20:17", -2.70547);
+      height_log.addValue("2008-Jun-17 11:20:19", -2.99125);
+      height_log.addValue("2008-Jun-17 11:20:20", -3);
+      height_log.addValue("2008-Jun-17 11:20:27", -2.98519);
+      height_log.addValue("2008-Jun-17 11:20:29", -2.68904);
+      height_log.addValue("2008-Jun-17 11:20:30", -2.5);
+      height_log.addValue("2008-Jun-17 11:20:38", -2.45909);
+      height_log.addValue("2008-Jun-17 11:20:39", -2.08764);
+      height_log.addValue("2008-Jun-17 11:20:40", -2);
+      height_log.addValue("2008-Jun-17 11:20:50", -1.85174);
+      height_log.addValue("2008-Jun-17 11:20:51", -1.51258);
+      height_log.addValue("2008-Jun-17 11:20:52", -1.5);
+      height_log.addValue("2008-Jun-17 11:21:01", -1.48566);
+      height_log.addValue("2008-Jun-17 11:21:02", -1.18799);
+      height_log.addValue("2008-Jun-17 11:21:04", -1);
+      height_log.addValue("2008-Jun-17 11:21:11", -0.98799);
+      height_log.addValue("2008-Jun-17 11:21:13", -0.63694);
+      height_log.addValue("2008-Jun-17 11:21:14", -0.5);
+      height_log.addValue("2008-Jun-17 11:21:23", -0.46247);
+      height_log.addValue("2008-Jun-17 11:21:24", -0.08519);
+      height_log.addValue("2008-Jun-17 11:21:25", 0);
+
+      TimeSeriesProperty<bool> period_log("period 7");
+      period_log.addValue("2008-Jun-17 11:11:13", false);
+      period_log.addValue("2008-Jun-17 11:11:13", false);
+      period_log.addValue("2008-Jun-17 11:11:18", false);
+      period_log.addValue("2008-Jun-17 11:11:30", false);
+      period_log.addValue("2008-Jun-17 11:11:42", false);
+      period_log.addValue("2008-Jun-17 11:11:52", false);
+      period_log.addValue("2008-Jun-17 11:12:01", false);
+      period_log.addValue("2008-Jun-17 11:12:11", false);
+      period_log.addValue("2008-Jun-17 11:12:21", true);
+      period_log.addValue("2008-Jun-17 11:12:32", false);
+      period_log.addValue("2008-Jun-17 11:12:42", false);
+      period_log.addValue("2008-Jun-17 11:12:52", false);
+      period_log.addValue("2008-Jun-17 11:13:02", false);
+      period_log.addValue("2008-Jun-17 11:16:55", false);
+      period_log.addValue("2008-Jun-17 11:17:00", false);
+      period_log.addValue("2008-Jun-17 11:17:16", false);
+      period_log.addValue("2008-Jun-17 11:17:28", false);
+      period_log.addValue("2008-Jun-17 11:17:37", false);
+      period_log.addValue("2008-Jun-17 11:17:48", false);
+      period_log.addValue("2008-Jun-17 11:17:57", false);
+      period_log.addValue("2008-Jun-17 11:18:07", true);
+      period_log.addValue("2008-Jun-17 11:18:18", false);
+      period_log.addValue("2008-Jun-17 11:18:28", false);
+      period_log.addValue("2008-Jun-17 11:18:38", false);
+      period_log.addValue("2008-Jun-17 11:18:48", false);
+      period_log.addValue("2008-Jun-17 11:20:07", false);
+      period_log.addValue("2008-Jun-17 11:20:11", false);
+      period_log.addValue("2008-Jun-17 11:20:24", false);
+      period_log.addValue("2008-Jun-17 11:20:34", false);
+      period_log.addValue("2008-Jun-17 11:20:46", false);
+      period_log.addValue("2008-Jun-17 11:20:58", false);
+      period_log.addValue("2008-Jun-17 11:21:08", false);
+      period_log.addValue("2008-Jun-17 11:21:19", true);
+      
+      TS_ASSERT_EQUALS(height_log.size(), 26);
+      
+      LogFilter filter(&height_log);
+      filter.addFilter(&period_log); // This throws when it shouldn't
+      //const TimeSeriesProperty<double> *filteredLog = filter.data();
+      //TS_ASSERT_EQUALS(filteredLog->size(), 5)
+    }
+
 private:
   std::time_t createTime_t_FromString(const std::string &str)
   {
diff --git a/Code/Mantid/Framework/PythonInterface/mantid/kernel/src/Exports/TimeSeriesProperty.cpp b/Code/Mantid/Framework/PythonInterface/mantid/kernel/src/Exports/TimeSeriesProperty.cpp
index 10d7219bead..f997042dca8 100644
--- a/Code/Mantid/Framework/PythonInterface/mantid/kernel/src/Exports/TimeSeriesProperty.cpp
+++ b/Code/Mantid/Framework/PythonInterface/mantid/kernel/src/Exports/TimeSeriesProperty.cpp
@@ -7,26 +7,43 @@ using Mantid::Kernel::TimeSeriesProperty;
 using Mantid::Kernel::Property;
 using namespace boost::python;
 
-void export_TimeSeriesProperty_Double()
+namespace
 {
-  register_ptr_to_python<TimeSeriesProperty<double>*>();
-  register_ptr_to_python<const TimeSeriesProperty<double>*>();
-  implicitly_convertible<TimeSeriesProperty<double>*,const TimeSeriesProperty<double>*>();
+  /// Defines the getStatistics member for various types
+  #define DEF_GET_STATS(TYPE) DEF_GET_STATS_##TYPE
+  /// Doubles have a get stats member
+  #define DEF_GET_STATS_double .def("getStatistics", &TimeSeriesProperty<double>::getStatistics)
+  /// booleans do not have a get stats member
+  #define DEF_GET_STATS_bool 
 
-  class_<TimeSeriesProperty<double>, bases<Property>, boost::noncopyable>("FloatTimeSeriesProperty", no_init)
-    .def("getStatistics", &Mantid::Kernel::TimeSeriesProperty<double>::getStatistics)
-    .add_property("value", &Mantid::Kernel::TimeSeriesProperty<double>::valuesAsVector)
-    .add_property("times", &Mantid::Kernel::TimeSeriesProperty<double>::timesAsVector)
+  /// Macro to reduce copy-and-paste
+  #define EXPORT_TIMESERIES_PROP(TYPE, Prefix)\
+    register_ptr_to_python<TimeSeriesProperty<TYPE>*>();\
+    register_ptr_to_python<const TimeSeriesProperty<TYPE>*>();\
+    implicitly_convertible<TimeSeriesProperty<TYPE>*,const TimeSeriesProperty<TYPE>*>();\
+    \
+    class_<TimeSeriesProperty<TYPE>, bases<Property>, boost::noncopyable>(#Prefix"TimeSeriesProperty", no_init)\
+      .add_property("value", &Mantid::Kernel::TimeSeriesProperty<TYPE>::valuesAsVector) \
+      .add_property("times", &Mantid::Kernel::TimeSeriesProperty<TYPE>::timesAsVector) \
+      .def("valueAsString", &TimeSeriesProperty<TYPE>::value) \
+      .def("size", &TimeSeriesProperty<TYPE>::size)\
+      .def("firstTime", &TimeSeriesProperty<TYPE>::firstTime) \
+      .def("firstValue", &TimeSeriesProperty<TYPE>::firstValue) \
+      .def("lastTime", &TimeSeriesProperty<TYPE>::lastTime) \
+      .def("lastValue", &TimeSeriesProperty<TYPE>::lastValue) \
+      DEF_GET_STATS(TYPE) \
+      ;
   ;
 }
 
-void export_TimeSeriesProperty_Bool()
+void export_TimeSeriesProperty_Double()
 {
-  register_ptr_to_python<TimeSeriesProperty<bool>*>();
-  register_ptr_to_python<const TimeSeriesProperty<bool>*>();
-  implicitly_convertible<TimeSeriesProperty<bool>*,const TimeSeriesProperty<bool>*>();
+  EXPORT_TIMESERIES_PROP(double, Float);
+}
 
-  class_<TimeSeriesProperty<bool>, bases<Property>, boost::noncopyable>("BoolTimeSeriesProperty", no_init);
+void export_TimeSeriesProperty_Bool()
+{
+  EXPORT_TIMESERIES_PROP(bool, Bool);
 }
 
 void export_TimeSeriesPropertyStatistics()
-- 
GitLab