Index: [Article Count Order] [Thread]

Date:  Wed, 20 Jun 2001 17:09:09 +0900
From:  ffukuda@....jp
Subject:  [XP-jp:02033] CppUnit small-tip (はじめまして)
To:  extremeprogramming-jp@....jp
Message-Id:  <200106200814.f5K8ELi00472@....jp>
X-Mail-Count: 02033

επιστημηです。はじめまして。

"型から入る"のが僕の癖でして、CppUnitがきっかけで
このMLを見つけました。よろしくです。

挨拶がわりに、 assert に使えるちょっとしたマクロ:

// 実際には1行で書くべし
#define assert_if(PRED) { 
  std::string p = PRED; 
  if (!p.empty()) 
    throw CppUnit::Exception(p,__LINE__,__FILE__); 
}

というオマジナイを唱えておけば、

template<class T>
struct assert_equal {
  /* 評価値がfalseなら適当な文字列、 trueなら空文字列を返す */
  std::string operator()(const T& x, const T& y) const {
    std::ostringstream stream;
    if ( x != y ) { stream << x << " != " << y; }
    return stream.str();
  }
}; 

なんてのをこさえ、

void MyTest::aTest() {
  assert_equal<int> p1;
  assert_equal<std::string> p2;
  int x = 1;
  int y = 2;
  assert( p1(x,y) ); // "1 != 2" がリポートされる
  std::string a = "apple";
  assert( p2(a,"orange") ); // "apple != orange" がリポートされる
}

----:----:----:----:----:----:----:----:----:----:----
Fumiki Fukuda (episteme) -- magical, but never a magic