Využil jsem možnosti preprocesoru přepsat zadaný výraz na řetězcový literál, stačí před parametr makra napsat znak #. Chci vypisovat pouze testy, které selhaly, jelikož testů může být mnoho a není důvod se soustředit na ty, které dopadly dobře. Tudíž kód makra obsahuje podmínku.
Pro jednoduchost zpracování předpokládám, že veškeré navrácené objekty lze uložit do výstupního proudu operátorem <<. Tato podmínka není až tolik omezující, neboť platí pro všechny základní typy. Poslední řádek makra se stará o vymazání obsahu pomocného proudu.
Makro
#include <iostream>Použití
#include <string>
#include "dict.h"
using namespace std;
#define TEST(expr, result) \
os << expr; \
if (os.str() != string(result)) { \
cout << "File " << __FILE__ << ", line " << __LINE__ << endl; \
cout << ">>> " << #expr << endl << os.str() << endl; \
cout << "ERROR (expected " << result << ")" << endl << endl; \
} \
os.str("");
int main()Výstup při chybě
{
Dict<string, int> d;
ostringstream os;
d.add("pes", 1);
TEST( d.contains("pes"), "1");
TEST( d.contains("les"), "1");
return 0;
}
File test_dict.cpp, line 25
>>> d.contains("les")
0
ERROR (expected 1)
Žádné komentáře:
Okomentovat