66   SECTION(
"box and delta") {
 
   68     auto convol_kernelu = [=](
const t_int ju) -> t_complex { 
return 1.; };
 
   69     auto convol_kernelv = [=](
const t_int jv) -> t_complex { 
return 1.; };
 
   70     auto convol_kernelw = [=](
const t_int jv, 
const t_int ju) -> t_complex {
 
   71       return ((std::floor(ju - (Jw - 1) * 0.5) == 0) and (std::floor(jv - (Jw - 1) * 0.5) == 0))
 
   75     const Matrix<t_complex> projection_kernel = convol::linear_convol_2d<t_complex>(
 
   76         convol_kernelu, convol_kernelv, convol_kernelw, 
static_cast<t_int
>(Ju),
 
   77         static_cast<t_int
>(Jv), 
static_cast<t_int
>(Jw), 
static_cast<t_int
>(Jw));
 
   78     CAPTURE(projection_kernel);
 
   79     CHECK(projection_kernel.cols() == (Ju + Jw - 1));
 
   80     CHECK(projection_kernel.rows() == (Jv + Jw - 1));
 
   81     CHECK(projection_kernel.block(2, 2, Jv, Ju)
 
   82               .isApprox(Matrix<t_complex>::Constant(Jv, Ju, 1.), 1e-12));
 
   84   SECTION(
"delta and delta") {
 
   86     auto convol_kernelu = [=](
const t_int ju) -> t_complex {
 
   87       return (std::floor(ju - (Ju - 1) * 0.5) == 0) ? 1. : 0.;
 
   89     auto convol_kernelv = [=](
const t_int jv) -> t_complex {
 
   90       return (std::floor(jv - (Jv - 1) * 0.5) == 0) ? 1. : 0.;
 
   92     auto convol_kernelw = [=](
const t_int jv, 
const t_int ju) -> t_complex {
 
   93       return ((std::floor(ju - (Jw - 1) * 0.5) == 0) and (std::floor(jv - (Jw - 1) * 0.5) == 0))
 
   97     const Matrix<t_complex> projection_kernel = convol::linear_convol_2d<t_complex>(
 
   98         convol_kernelu, convol_kernelv, convol_kernelw, 
static_cast<t_int
>(Ju),
 
   99         static_cast<t_int
>(Jv), 
static_cast<t_int
>(Jw), 
static_cast<t_int
>(Jw));
 
  100     CAPTURE(projection_kernel);
 
  101     CHECK(projection_kernel.cols() == (Ju + Jw - 1));
 
  102     CHECK(projection_kernel.rows() == (Jv + Jw - 1));
 
  103     CHECK(projection_kernel(4, 3) == 1.);
 
  105   SECTION(
"delta_size_1") {
 
  107     auto convol_kernelu = [=](
const t_int ju) -> t_complex {
 
  108       return (std::floor(ju - (Ju - 1) * 0.5) == 0) ? 1. : 0.;
 
  110     auto convol_kernelv = [=](
const t_int jv) -> t_complex {
 
  111       return (std::floor(jv - (Jv - 1) * 0.5) == 0) ? 1. : 0.;
 
  113     auto convol_kernelw = [=](
const t_int jv, 
const t_int ju) -> t_complex {
 
  114       return ((std::floor(ju - (Jw - 1) * 0.5) == 0) and (std::floor(jv - (Jw - 1) * 0.5) == 0))
 
  118     const Matrix<t_complex> projection_kernel = convol::linear_convol_2d<t_complex>(
 
  119         convol_kernelu, convol_kernelv, convol_kernelw, 
static_cast<t_int
>(Ju),
 
  120         static_cast<t_int
>(Jv), 
static_cast<t_int
>(Jw), 
static_cast<t_int
>(Jw));
 
  121     CAPTURE(projection_kernel);
 
  122     CHECK(projection_kernel.cols() == (Ju + Jw - 1));
 
  123     CHECK(projection_kernel.rows() == (Jv + Jw - 1));
 
  124     CHECK(projection_kernel(2, 1) == 1.);
 
  126   SECTION(
"box_and_delta_size_1") {
 
  128     auto convol_kernelu = [=](
const t_int ju) -> t_complex { 
return ju * 1.; };
 
  129     auto convol_kernelv = [=](
const t_int jv) -> t_complex { 
return jv * 1.; };
 
  130     auto convol_kernelw = [=](
const t_int jv, 
const t_int ju) -> t_complex {
 
  131       return ((std::floor(ju - (Jw - 1) * 0.5) == 0) and (std::floor(jv - (Jw - 1) * 0.5) == 0))
 
  135     const Matrix<t_complex> projection_kernel = convol::linear_convol_2d<t_complex>(
 
  136         convol_kernelu, convol_kernelv, convol_kernelw, 
static_cast<t_int
>(Ju),
 
  137         static_cast<t_int
>(Jv), 
static_cast<t_int
>(Jw), 
static_cast<t_int
>(Jw));
 
  138     CAPTURE(projection_kernel);
 
  139     CHECK(projection_kernel.cols() == (Ju + Jw - 1));
 
  140     CHECK(projection_kernel.rows() == (Jv + Jw - 1));
 
  141     for (
int i = 0; i < projection_kernel.cols(); i++) {
 
  142       for (
int j = 0; j < projection_kernel.rows(); j++) {
 
  143         CHECK(std::abs(
static_cast<t_real
>(i * j) - projection_kernel(j, i)) < 1e-12);