blob: f2b46f31ea21f1b2e2b19d1539322d3fa0eac2f2 [file] [log] [blame]
// -*- Mode: C++ -*-
extern "C" {
#define NOT_MAIN 1
#define REGRESSION_TEST 0
#define VCDIFF_TOOLS 1
#include "../xdelta3.c"
}
#define CHECK_EQ(x,y) CHECK_OP(x,y,==)
#define CHECK_NE(x,y) CHECK_OP(x,y,!=)
#define CHECK_LT(x,y) CHECK_OP(x,y,<)
#define CHECK_GT(x,y) CHECK_OP(x,y,>)
#define CHECK_LE(x,y) CHECK_OP(x,y,<=)
#define CHECK_GE(x,y) CHECK_OP(x,y,>=)
#define CHECK_OP(x,y,OP) \
do { \
typeof(x) _x(x); \
typeof(x) _y(y); \
if (!(_x OP _y)) { \
cerr << __FILE__ << ":" << __LINE__ << " Check failed: " << #x " " #OP " " #y << endl; \
cerr << __FILE__ << ":" << __LINE__ << " Expected: " << _x << endl; \
cerr << __FILE__ << ":" << __LINE__ << " Actual: " << _y << endl; \
abort(); \
} } while (false)
#define CHECK(x) \
do {if (!(x)) { \
cerr << __FILE__ << ":" << __LINE__ << " Check failed: " << #x << endl; \
abort(); \
} } while (false)
#include <string>
using std::string;
#include <vector>
using std::vector;
inline string CommandToString(const vector<const char*> &v) {
string s(v[0]);
for (size_t i = 1; i < v.size() && v[i] != NULL; i++) {
s.append(" ");
s.append(v[i]);
}
return s;
}
#include <iostream>
using std::cerr;
using std::endl;
using std::ostream;
#include <map>
using std::map;
using std::pair;
#include <ext/hash_map>
using __gnu_cxx::hash_map;
#include <list>
using std::list;
template <typename T, typename U>
pair<T, U> make_pair(const T& t, const U& u) {
return pair<T, U>(t, u);
}
class Constants {
public:
// TODO: need to repeat the tests with different block sizes
// 1 << 7 triggers some bugs, 1 << 20 triggers others.
//
//static const xoff_t BLOCK_SIZE = 1 << 20;
static const xoff_t BLOCK_SIZE = 1 << 7;
};
using std::min;
#include "random.h"
using regtest::MTRandom;
using regtest::MTRandom8;
#include "segment.h"
using regtest::Segment;
#include "modify.h"
using regtest::Mutator;
using regtest::ChangeList;
using regtest::Change;
using regtest::ChangeListMutator;
using regtest::Modify1stByte;
#include "file.h"
using regtest::Block;
using regtest::BlockIterator;
using regtest::ExtFile;
using regtest::FileSpec;
using regtest::TmpFile;
#include "cmp.h"
using regtest::CmpDifferentBytes;
#include "sizes.h"
using regtest::SizeIterator;
using regtest::SmallSizes;
using regtest::LargeSizes;
#include "delta.h"
using regtest::Delta;