Skip to content
Snippets Groups Projects
optest.h 1.29 KiB
Newer Older
#ifndef LIBWCCL_TESTS_OPTEST_H
#define LIBWCCL_TESTS_OPTEST_H

#include <libwccl/ops/functions/constant.h>
#include <libwccl/ops/function.h>
#include <libwccl/values/position.h>


namespace Wccl {

class PositionFixture
{
public:
	PositionFixture(int max_offset = 1);

	int max_offset() { return max_offset(); }

	Position begin_value() { return positions_[0]; }
	Position end_value() { return positions_[1]; }
	Position nowhere_value() { return positions_[2]; }
	Position pos_value(int offset) {
		return positions_[get_idx(offset)];
	}

	boost::shared_ptr< Wccl::Function<Position> > begin() { return constants_[0]; }
	boost::shared_ptr< Wccl::Function<Position> > end() { return constants_[1]; }
	boost::shared_ptr< Wccl::Function<Position> > nowhere() { return constants_[2]; }
	boost::shared_ptr< Wccl::Function<Position> > pos(int offset) {
		return constants_[get_idx(offset)];
	}

protected:

private:
	int get_idx(int offset) {
		assert(offset <= max_offset_);
		assert(offset >= -max_offset_);
		int idx = offset + max_offset_ + 3;
		assert(idx >= 0);
		assert(static_cast<size_t>(idx) < positions_.size());
		return idx;
	}

	int max_offset_;
	std::vector<Position> positions_;
	std::vector< boost::shared_ptr< Wccl::Function<Position> > > constants_;
};


} /* end ns Wccl */

#endif // LIBWCCL_TESTS_OPTEST_H