2017年4月23日日曜日

現在の不具合

現在の不具合として大阪電車区間の運賃が不正である箇所が見つかっています。
この問題については次回りリースまでに修正します。5月中の予定です。
そのほか前回お伝えしたクラッシュする不具合については修正されたのかクラッシュログは上がらないようになりましたが、それとは別に最短経路指定時にクラッシュしているログが新たにあがっております。こちらでは下記テストプログラムを作成(ランダムに指定して擬似的に実行)していますが、10時間程度動かしていて発生していません。
毎度恐縮ですがもし現象が発生する方がおりましたらご連絡いただけますと幸いです。
(どのDB(2017年版か)を使いどのような経路指定でどこまでの最短経路指定時に発生したか)



テストプログラム
#include "farertd.h"

#define DBPATH "../../../db/jrdb2017.db"

int g_tax = 8;
Route route;

#define RANDOM(l, h) (rand() % (h - l + 1) + l)

static int32_t getrandom(void)
{
 static int c = 0;
 tstring s;
 int32_t t;

 ++c;

 do {
  do {
   t = RANDOM(1, MAX_STATION);
   s = RouteUtil::StationName(t);
  } while (s.empty());
  } while (((c % 13) != 0) && !STATION_IS_JUNCTION(t));

 return t;
}


#if 0
   Usage:
    ./test >/dev/null
    or
    ./test >log
#endif

#define NumOf(c) (sizeof(c) / sizeof(c[0]))

int main(int argc, char** argv)
{
 int c = 0;
 int t = 0;
 int e[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 int b = 0;
 int rc;
 int n;
 
 srand((unsigned)time(NULL));

 if (! DBS::getInstance()->open(DBPATH)) {
  printf("Can't db open\n");
  return -1;
 }

 for (c = 1; 1; c++) { /* infinite */
  t = getrandom();
  for (n = 0; n < NumOf(e); n++) {
   e[n] = getrandom();
  }
  for (b = 0; b < 2; b++) {
   rc = route.add(t);
   if (rc <= 0) {
    fprintf(stderr, "error start terminal add %s: %d\n", RouteUtil::StationName(t).c_str(), rc);
    return -1;
   }
   for (n = 0; rc == 1 && n < 10; n++) {
    fprintf(stderr, "%6d-%02d auto route result(%s)%s->%s. ", 
                                                    c, n + 1,
                                                    b == 0 ? "nba" : "bal", 
                n != 0 ? "" : RouteUtil::StationName(t).c_str(), 
                RouteUtil::StationName(e[n]).c_str());
    fflush(stderr);
    rc = route.changeNeerest(b, e[n]);
    fprintf(stderr, "%d\n", rc);
   }
  }
 }
 return 0;
}