]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/test/intltest/astrotst.cpp
ICU-66108.tar.gz
[apple/icu.git] / icuSources / test / intltest / astrotst.cpp
index 4b842f3b4e276f2c3cc9270b1e3ffb5dd9264ce1..ba1c5be5ef965846bae83c41fae2954cec93e27c 100644 (file)
@@ -44,7 +44,12 @@ void AstroTest::runIndexedTest( int32_t index, UBool exec, const char* &name, ch
 
 #undef CASE
 
-#define ASSERT_OK(x)   if(U_FAILURE(x)) { dataerrln("%s:%d: %s\n", __FILE__, __LINE__, u_errorName(x)); return; }
+#define ASSERT_OK(x) UPRV_BLOCK_MACRO_BEGIN { \
+    if(U_FAILURE(x)) { \
+        dataerrln("%s:%d: %s\n", __FILE__, __LINE__, u_errorName(x)); \
+        return; \
+    } \
+} UPRV_BLOCK_MACRO_END
 
 
 void AstroTest::initAstro(UErrorCode &status) {
@@ -256,7 +261,7 @@ void AstroTest::TestSunriseTimes(void) {
 
   logln("Sunrise/Sunset times for Toronto, Canada");
   // long = 79 25", lat = 43 40"
-  CalendarAstronomer *astro3 = new CalendarAstronomer(-(79+25/60), 43+40/60);
+  CalendarAstronomer astro3(-(79+25/60), 43+40/60);
 
   // As of ICU4J 2.8 the ICU4J time zones implement pass-through
   // to the underlying JDK.  Because of variation in the
@@ -266,46 +271,47 @@ void AstroTest::TestSunriseTimes(void) {
   // [aliu 10/15/03]
 
   // TimeZone tz = TimeZone.getTimeZone("America/Montreal");
-  TimeZone *tz = new SimpleTimeZone(-18000000 + 3600000, "Montreal(FIXED)");
-
-  GregorianCalendar *cal = new GregorianCalendar(tz->clone(), Locale::getUS(), status);
-  GregorianCalendar *cal2 = new GregorianCalendar(tz->clone(), Locale::getUS(), status);
-  cal->clear();
-  cal->set(UCAL_YEAR, 2001);
-  cal->set(UCAL_MONTH, UCAL_APRIL);
-  cal->set(UCAL_DAY_OF_MONTH, 1);
-  cal->set(UCAL_HOUR_OF_DAY, 12); // must be near local noon for getSunRiseSet to work
-
-  DateFormat *df_t  = DateFormat::createTimeInstance(DateFormat::MEDIUM,Locale::getUS());
-  DateFormat *df_d  = DateFormat::createDateInstance(DateFormat::MEDIUM,Locale::getUS());
-  DateFormat *df_dt = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::MEDIUM, Locale::getUS());
-  if(!df_t || !df_d || !df_dt) {
-    dataerrln("couldn't create dateformats.");
-    return;
+  SimpleTimeZone tz(-18000000 + 3600000, "Montreal(FIXED)");
+
+  GregorianCalendar cal(tz.clone(), Locale::getUS(), status);
+  GregorianCalendar cal2(tz.clone(), Locale::getUS(), status);
+  cal.clear();
+  cal.set(UCAL_YEAR, 2001);
+  cal.set(UCAL_MONTH, UCAL_APRIL);
+  cal.set(UCAL_DAY_OF_MONTH, 1);
+  cal.set(UCAL_HOUR_OF_DAY, 12); // must be near local noon for getSunRiseSet to work
+
+  LocalPointer<DateFormat> df_t(DateFormat::createTimeInstance(DateFormat::MEDIUM,Locale::getUS()));
+  LocalPointer<DateFormat> df_d(DateFormat::createDateInstance(DateFormat::MEDIUM,Locale::getUS()));
+  LocalPointer<DateFormat> df_dt(DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::MEDIUM, Locale::getUS()));
+  if(!df_t.isValid() || !df_d.isValid() || !df_dt.isValid()) {
+      dataerrln("couldn't create dateformats.");
+      closeAstro(status);
+      return;
   }
-  df_t->adoptTimeZone(tz->clone());
-  df_d->adoptTimeZone(tz->clone());
-  df_dt->adoptTimeZone(tz->clone());
+  df_t->adoptTimeZone(tz.clone());
+  df_d->adoptTimeZone(tz.clone());
+  df_dt->adoptTimeZone(tz.clone());
 
   for (int32_t i=0; i < 30; i++) {
     logln("setDate\n");
-    astro3->setDate(cal->getTime(status));
+    astro3.setDate(cal.getTime(status));
     logln("getRiseSet(TRUE)\n");
-    UDate sunrise = astro3->getSunRiseSet(TRUE);
+    UDate sunrise = astro3.getSunRiseSet(TRUE);
     logln("getRiseSet(FALSE)\n");
-    UDate sunset  = astro3->getSunRiseSet(FALSE);
+    UDate sunset  = astro3.getSunRiseSet(FALSE);
     logln("end of getRiseSet\n");
 
-    cal2->setTime(cal->getTime(status), status);
-    cal2->set(UCAL_SECOND,      0);
-    cal2->set(UCAL_MILLISECOND, 0);
+    cal2.setTime(cal.getTime(status), status);
+    cal2.set(UCAL_SECOND,      0);
+    cal2.set(UCAL_MILLISECOND, 0);
 
-    cal2->set(UCAL_HOUR_OF_DAY, USNO[4*i+0]);
-    cal2->set(UCAL_MINUTE,      USNO[4*i+1]);
-    UDate exprise = cal2->getTime(status);
-    cal2->set(UCAL_HOUR_OF_DAY, USNO[4*i+2]);
-    cal2->set(UCAL_MINUTE,      USNO[4*i+3]);
-    UDate expset = cal2->getTime(status);
+    cal2.set(UCAL_HOUR_OF_DAY, USNO[4*i+0]);
+    cal2.set(UCAL_MINUTE,      USNO[4*i+1]);
+    UDate exprise = cal2.getTime(status);
+    cal2.set(UCAL_HOUR_OF_DAY, USNO[4*i+2]);
+    cal2.set(UCAL_MINUTE,      USNO[4*i+3]);
+    UDate expset = cal2.getTime(status);
     // Compute delta of what we got to the USNO data, in seconds
     int32_t deltarise = (int32_t)uprv_fabs((sunrise - exprise) / 1000);
     int32_t deltaset = (int32_t)uprv_fabs((sunset - expset) / 1000);
@@ -318,34 +324,34 @@ void AstroTest::TestSunriseTimes(void) {
     UnicodeString s1, s2, s3, s4, s5;
     if (deltarise > MAX_DEV || deltaset > MAX_DEV) {
       if (deltarise > MAX_DEV) {
-        errln("FAIL: (rise) " + df_d->format(cal->getTime(status),s1) +
+        errln("FAIL: (rise) " + df_d->format(cal.getTime(status),s1) +
               ", Sunrise: " + df_dt->format(sunrise, s2) +
               " (USNO " + df_t->format(exprise,s3) +
               " d=" + deltarise + "s)");
       } else {
-        logln(df_d->format(cal->getTime(status),s1) +
+        logln(df_d->format(cal.getTime(status),s1) +
               ", Sunrise: " + df_dt->format(sunrise,s2) +
               " (USNO " + df_t->format(exprise,s3) + ")");
       }
       s1.remove(); s2.remove(); s3.remove(); s4.remove(); s5.remove();
       if (deltaset > MAX_DEV) {
-        errln("FAIL: (set)  " + df_d->format(cal->getTime(status),s1) +
+        errln("FAIL: (set)  " + df_d->format(cal.getTime(status),s1) +
               ", Sunset:  " + df_dt->format(sunset,s2) +
               " (USNO " + df_t->format(expset,s3) +
               " d=" + deltaset + "s)");
       } else {
-        logln(df_d->format(cal->getTime(status),s1) +
+        logln(df_d->format(cal.getTime(status),s1) +
               ", Sunset: " + df_dt->format(sunset,s2) +
               " (USNO " + df_t->format(expset,s3) + ")");
       }
     } else {
-      logln(df_d->format(cal->getTime(status),s1) +
+      logln(df_d->format(cal.getTime(status),s1) +
             ", Sunrise: " + df_dt->format(sunrise,s2) +
             " (USNO " + df_t->format(exprise,s3) + ")" +
             ", Sunset: " + df_dt->format(sunset,s4) +
             " (USNO " + df_t->format(expset,s5) + ")");
     }
-    cal->add(UCAL_DATE, 1, status);
+    cal.add(UCAL_DATE, 1, status);
   }
 
   //        CalendarAstronomer a = new CalendarAstronomer(-(71+5/60), 42+37/60);
@@ -358,13 +364,6 @@ void AstroTest::TestSunriseTimes(void) {
   //        cal.set(cal.DATE, 27);
   //        a.setDate(cal.getTime());
   //        long r = a.getSunRiseSet2(true);
-  delete astro3;
-  delete tz;
-  delete cal;
-  delete cal2;
-  delete df_t;
-  delete df_d;
-  delete df_dt;
   closeAstro(status);
   ASSERT_OK(status);
 }
@@ -380,38 +379,43 @@ void AstroTest::TestBasics(void) {
   }
 
   // Check that our JD computation is the same as the book's (p. 88)
-  GregorianCalendar *cal3 = new GregorianCalendar(TimeZone::getGMT()->clone(), Locale::getUS(), status);
-  DateFormat *d3 = DateFormat::createDateTimeInstance(DateFormat::MEDIUM,DateFormat::MEDIUM,Locale::getUS());
+  GregorianCalendar cal3(TimeZone::getGMT()->clone(), Locale::getUS(), status);
+  LocalPointer<DateFormat> d3(DateFormat::createDateTimeInstance(DateFormat::MEDIUM,DateFormat::MEDIUM,Locale::getUS()));
+  if (d3.isNull()) {
+      dataerrln("Got error: %s", u_errorName(status));
+      closeAstro(status);
+      return;
+  }
   d3->setTimeZone(*TimeZone::getGMT());
-  cal3->clear();
-  cal3->set(UCAL_YEAR, 1980);
-  cal3->set(UCAL_MONTH, UCAL_JULY);
-  cal3->set(UCAL_DATE, 2);
-  logln("cal3[a]=%.1lf, d=%d\n", cal3->getTime(status), cal3->get(UCAL_JULIAN_DAY,status));
+  cal3.clear();
+  cal3.set(UCAL_YEAR, 1980);
+  cal3.set(UCAL_MONTH, UCAL_JULY);
+  cal3.set(UCAL_DATE, 2);
+  logln("cal3[a]=%.1lf, d=%d\n", cal3.getTime(status), cal3.get(UCAL_JULIAN_DAY,status));
   {
     UnicodeString s;
-    logln(UnicodeString("cal3[a] = ") + d3->format(cal3->getTime(status),s));
+    logln(UnicodeString("cal3[a] = ") + d3->format(cal3.getTime(status),s));
   }
-  cal3->clear();
-  cal3->set(UCAL_YEAR, 1980);
-  cal3->set(UCAL_MONTH, UCAL_JULY);
-  cal3->set(UCAL_DATE, 27);
-  logln("cal3=%.1lf, d=%d\n", cal3->getTime(status), cal3->get(UCAL_JULIAN_DAY,status));
+  cal3.clear();
+  cal3.set(UCAL_YEAR, 1980);
+  cal3.set(UCAL_MONTH, UCAL_JULY);
+  cal3.set(UCAL_DATE, 27);
+  logln("cal3=%.1lf, d=%d\n", cal3.getTime(status), cal3.get(UCAL_JULIAN_DAY,status));
 
   ASSERT_OK(status);
   {
     UnicodeString s;
-    logln(UnicodeString("cal3 = ") + d3->format(cal3->getTime(status),s));
+    logln(UnicodeString("cal3 = ") + d3->format(cal3.getTime(status),s));
   }
-  astro->setTime(cal3->getTime(status));
+  astro->setTime(cal3.getTime(status));
   double jd = astro->getJulianDay() - 2447891.5;
   double exp = -3444.;
   if (jd == exp) {
     UnicodeString s;
-    logln(d3->format(cal3->getTime(status),s) + " => " + jd);
+    logln(d3->format(cal3.getTime(status),s) + " => " + jd);
   } else {
     UnicodeString s;
-    errln("FAIL: " + d3->format(cal3->getTime(status), s) + " => " + jd +
+    errln("FAIL: " + d3->format(cal3.getTime(status), s) + " => " + jd +
           ", expected " + exp);
   }
 
@@ -423,8 +427,6 @@ void AstroTest::TestBasics(void) {
   //        astro.setDate(cal3.getTime());
   //        astro.foo();
 
-  delete cal3;
-  delete d3;
   ASSERT_OK(status);
   closeAstro(status);
   ASSERT_OK(status);