]> git.mxchange.org Git - simgear.git/blobdiff - simgear/environment/test_metar.cxx
Don't continue parsing after processing version line
[simgear.git] / simgear / environment / test_metar.cxx
index bcdc772598d298ac23a54c6374338fd216587352..4193418823963078ef7362ae1cb3a6d80c7b782b 100644 (file)
@@ -30,12 +30,20 @@ using std::string;
         exit(1); \
     }
 
+#define FUZZY_COMPARE(a, b, epsilon) \
+    if (fabs(a - b) > epsilon) { \
+        cerr << "failed:" << #a << " != " << #b << endl; \
+        cerr << "\tgot:" << a << endl; \
+        cerr << "\tepsilon:" << epsilon << endl; \
+    }
+
 #define VERIFY(a) \
     if (!(a))  { \
         cerr << "failed:" << #a << endl; \
         exit(1); \
     }
-    
+
+const double TEST_EPSILON = 1e-9;
 
 void test_basic()
 {
@@ -48,17 +56,50 @@ void test_basic()
     COMPARE(m1.getReportType(), -1); // should default to NIL?
     
     COMPARE(m1.getWindDir(), 270);
-    COMPARE(m1.getWindSpeed_kt(), 12);
+    FUZZY_COMPARE(m1.getWindSpeed_kt(), 12, TEST_EPSILON);
     
-    COMPARE(m1.getTemperature_C(), 10);
-    COMPARE(m1.getDewpoint_C(), 5);
-    COMPARE(m1.getPressure_hPa(), 1025);
+    COMPARE(m1.getWeather().size(), 1);
+    COMPARE(m1.getClouds().size(), 2);
+
+    FUZZY_COMPARE(m1.getTemperature_C(), 10, TEST_EPSILON);
+    FUZZY_COMPARE(m1.getDewpoint_C(), 5, TEST_EPSILON);
+    FUZZY_COMPARE(m1.getPressure_hPa(), 1025, TEST_EPSILON);
+}
+
+void test_sensor_failure_weather()
+{
+    SGMetar m1("2011/10/20 11:25 EHAM 201125Z 27012KT 240V300 9999 // FEW025CB SCT048 10/05 Q1025");
+    COMPARE(m1.getWindDir(), 270);
+    FUZZY_COMPARE(m1.getWindSpeed_kt(), 12, TEST_EPSILON);
+
+    COMPARE(m1.getWeather().size(), 0);
+    COMPARE(m1.getClouds().size(), 2);
+
+    FUZZY_COMPARE(m1.getTemperature_C(), 10, TEST_EPSILON);
+    FUZZY_COMPARE(m1.getDewpoint_C(), 5, TEST_EPSILON);
+    FUZZY_COMPARE(m1.getPressure_hPa(), 1025, TEST_EPSILON);
+}
+
+void test_sensor_failure_cloud()
+{
+    SGMetar m1("2011/10/20 11:25 EHAM 201125Z 27012KT 240V300 9999 FEW025CB/// SCT048/// 10/05 Q1025");
+    COMPARE(m1.getWindDir(), 270);
+    FUZZY_COMPARE(m1.getWindSpeed_kt(), 12, TEST_EPSILON);
+
+    COMPARE(m1.getWeather().size(), 0);
+    COMPARE(m1.getClouds().size(), 2);
+
+    FUZZY_COMPARE(m1.getTemperature_C(), 10, TEST_EPSILON);
+    FUZZY_COMPARE(m1.getDewpoint_C(), 5, TEST_EPSILON);
+    FUZZY_COMPARE(m1.getPressure_hPa(), 1025, TEST_EPSILON);
 }
 
 int main(int argc, char* argv[])
 {
     try {
-    test_basic();
+        test_basic();
+        test_sensor_failure_weather();
+        test_sensor_failure_cloud();
     } catch (sg_exception& e) {
         cerr << "got exception:" << e.getMessage() << endl;
         return -1;