Exemple #1
0
static void
TestFix()
{
  IGCExtensions extensions;
  extensions.clear();

  IGCFix fix;
  ok1(!IGCParseFix("", extensions, fix));
  ok1(!IGCParseFix("B1122385103117N00742367EA", extensions, fix));

  ok1(!IGCParseFix("B1122385103117X00742367EA0049000487", extensions, fix));
  ok1(!IGCParseFix("B1122385103117N00742367XA0049000487", extensions, fix));
  ok1(!IGCParseFix("B1122389003117N00742367EA0049000487", extensions, fix));
  ok1(!IGCParseFix("B1122385103117N18042367EA0049000487", extensions, fix));
  ok1(!IGCParseFix("B1122385163117N00742367EA0049000487", extensions, fix));
  ok1(!IGCParseFix("B1122385103117N00762367EA0049000487", extensions, fix));

  ok1(IGCParseFix("B1122385103117N00742367EA0049000487", extensions, fix));
  ok1(fix.time == BrokenTime(11, 22, 38));
  ok1(equals(fix.location, 51.05195, 7.70611667));
  ok1(fix.gps_valid);
  ok1(fix.pressure_altitude == 490);
  ok1(fix.gps_altitude == 487);

  ok1(IGCParseFix("B1122385103117N00742367EV0049000487", extensions, fix));
  ok1(fix.time == BrokenTime(11, 22, 38));
  ok1(equals(fix.location, 51.05195, 7.70611667));
  ok1(!fix.gps_valid);
  ok1(fix.pressure_altitude == 490);
  ok1(fix.gps_altitude == 487);

  ok1(!IGCParseFix("B1122385103117N00742367EX0049000487", extensions, fix));

  ok1(IGCParseFix("B1122435103117N00742367EA004900000000000",
                  extensions, fix));
  ok1(fix.time == BrokenTime(11, 22, 43));
  ok1(fix.gps_valid);
  ok1(fix.pressure_altitude == 490);
  ok1(fix.gps_altitude == 0);

  ok1(IGCParseFix("B1122535103117S00742367WA104900000700000",
                  extensions, fix));
  ok1(fix.time == BrokenTime(11, 22, 53));
  ok1(fix.gps_valid);
  ok1(equals(fix.location, -51.05195, -7.70611667));
  ok1(fix.pressure_altitude == 10490);
  ok1(fix.gps_altitude == 7);
}
Exemple #2
0
static fixed
Normalise(WrapClock &w, BrokenDate &date,
          unsigned hour, unsigned minute, unsigned second=0)
{
  return w.Normalise(fixed(hour * 3600 + minute * 60 + second), date,
                     BrokenTime(hour, minute, second));
}
Exemple #3
0
BrokenTime
BrokenTime::FromSecondOfDay(unsigned second_of_day)
{
  assert(second_of_day < 3600u * 24u);

  unsigned hour = second_of_day / 3600u;
  unsigned second_of_hour = second_of_day % 3600u;
  return BrokenTime(hour, second_of_hour / 60u, second_of_hour % 60u);
}
Exemple #4
0
bool
IGCParseTime(const char *buffer, BrokenTime &time)
{
  unsigned hour, minute, second;

  if (sscanf(buffer, "%02u%02u%02u", &hour, &minute, &second) != 3)
    return false;

  time = BrokenTime(hour, minute, second);
  return time.IsPlausible();
}
Exemple #5
0
static void
TestFixTime()
{
  BrokenTime time;
  ok1(!IGCParseTime("", time));

  ok1(IGCParseTime("000000", time));
  ok1(time == BrokenTime(00, 00, 00));

  ok1(IGCParseTime("112238", time));
  ok1(time == BrokenTime(11, 22, 38));

  ok1(IGCParseTime("235959", time));
  ok1(time == BrokenTime(23, 59, 59));

  ok1(!IGCParseTime("235960", time));
  ok1(!IGCParseTime("236059", time));
  ok1(!IGCParseTime("240000", time));

  ok1(IGCParseTime("0123375103117N00742367EV0049000487", time));
  ok1(time == BrokenTime(01, 23, 37));
}
Exemple #6
0
static void
TestTime()
{
  ok1(BrokenTime(12, 15).hour == 12);
  ok1(BrokenTime(12, 15).minute == 15);
  ok1(BrokenTime(12, 15).second == 0);

  ok1(BrokenTime(12, 15, 30).hour == 12);
  ok1(BrokenTime(12, 15, 30).minute == 15);
  ok1(BrokenTime(12, 15, 30).second == 30);

  ok1(BrokenTime(12, 15, 30) == BrokenTime(12, 15, 30));
  ok1(!(BrokenTime(12, 15, 30) == BrokenTime(12, 15, 31)));
  ok1(!(BrokenTime(12, 15, 30) == BrokenTime(12, 16, 30)));
  ok1(!(BrokenTime(12, 15, 30) == BrokenTime(13, 15, 30)));

  ok1(!(BrokenTime(12, 15, 30) > BrokenTime(12, 15, 30)));
  ok1(!(BrokenTime(12, 15, 30) > BrokenTime(12, 15, 31)));
  ok1(BrokenTime(12, 15, 31) > BrokenTime(12, 15, 30));

  ok1(!(BrokenTime(12, 15, 30) > BrokenTime(12, 15, 30)));
  ok1(!(BrokenTime(12, 15, 30) > BrokenTime(2010, 16, 30)));
  ok1(BrokenTime(12, 16, 30) > BrokenTime(12, 15, 30));

  ok1(!(BrokenTime(12, 15, 30) > BrokenTime(12, 15, 30)));
  ok1(!(BrokenTime(12, 15, 30) > BrokenTime(13, 15, 30)));
  ok1(BrokenTime(13, 15, 30) > BrokenTime(12, 15, 30));

  ok1(BrokenTime(23, 59, 59).Plausible());
  ok1(BrokenTime(0, 0, 0).Plausible());
  ok1(!BrokenTime(24, 0, 0).Plausible());
  ok1(!BrokenTime(12, 60, 1).Plausible());
  ok1(!BrokenTime(12, 15, 60).Plausible());

  ok1(BrokenTime(12, 15, 30).GetSecondOfDay() == 44130);
  ok1(BrokenTime::FromSecondOfDay(44130) == BrokenTime(12, 15, 30));
  ok1(BrokenTime::FromSecondOfDayChecked(130530) == BrokenTime(12, 15, 30));

  ok1(BrokenTime(12, 15) + 120 == BrokenTime(12, 17));
  ok1(BrokenTime(23, 59) + 120 == BrokenTime(0, 1));
  ok1(BrokenTime(23, 59) + 120 == BrokenTime(0, 1));
  ok1(BrokenTime(0, 1) - 120 == BrokenTime(23, 59));
  ok1(BrokenTime(0, 1) - 120u == BrokenTime(23, 59));
}
Exemple #7
0
 /**
  * Returns an instance that fails the Plausible() check.
  */
 constexpr
 static BrokenTime Invalid() {
     return BrokenTime(24, 60, 60);
 }
Exemple #8
0
 constexpr
 static BrokenTime Midnight() {
   return BrokenTime(0, 0);
 }
BrokenTime
RasterWeatherStore::IndexToTime(unsigned index)
{
    return BrokenTime(index / 2, index % 2 == 0 ? 0 : 30);
}