bool FFTConvolve::test() { Image im(17, 34, 8, 2); Image kernel(5, 7, 3, 2); Noise::apply(im, 0, 1); Noise::apply(kernel, 0, 1); // Make the kernel lopsided to check for flipping issues kernel(0, 0, 0, 0) = 17; Convolve::BoundaryCondition b[] = {Convolve::Clamp, Convolve::Wrap, Convolve::Zero, Convolve::Homogeneous}; Multiply::Mode m[] = {Multiply::Outer, Multiply::Elementwise, Multiply::Inner}; for (int i = 0; i < 4; i++) { for (int j = 0; j < 3; j++) { Image fa = FFTConvolve::apply(im, kernel, b[i], m[j]); Image a = Convolve::apply(im, kernel, b[i], m[j]); if (!nearlyEqual(a, fa)) return false; } } return true; }
static bool parallel(const GrDrawState::Edge& a, const GrDrawState::Edge& b) { return (nearlyEqual(a.fX, b.fX) && nearlyEqual(a.fY, b.fY)) || (nearlyEqual(a.fX, -b.fX) && nearlyEqual(a.fY, -b.fY)); }
static bool nearlyEqual(const GrPoint& a, const GrPoint& b) { return nearlyEqual(a.fX, b.fX) && nearlyEqual(a.fY, b.fY); }