text: #include "Halide.h"
  #include <stdio.h>
  
  using namespace Halide;
  
  int main(int argc, char **argv) {
      // By default, the bounds computed in the initialization step of a
      // reduction cover all uses of the Func by later stages. During
      // lowering, we expand them to cover the bounds read by the update
      // step. We had a bug where we expanded the bounds, but didn't
      // updated the max_min, which meant that vectorized
      // initializations were not being initialized over the full
      // domain. This example tests the fix for that bug.
  
      Func f, g;
      Var x;
      RDom r(0, 4);
  
      f(x) = x;
      f(r) = f(r-1) + f(r+1);
      f.compute_root().vectorize(x, 4);
      f.update();
  
      g(x) = f(x);
      Image<int> result = g.realize(4);
  
  
      // The sequence generated should be:
      // -1, (-1 + 1) = 0, 0 + 2 = 2, 2 + 3 = 5, 5 + 4 = 9
      if (result(0) != 0 || result(1) != 2 || result(2) != 5 || result(3) != 9) {
          printf("Resulting sequence was: %d %d %d %d instead of 0 2 5 9\n",
                 result(0), result(1), result(2), result(3));
          return -1;
      }
  
      printf("Success\n");
      return 0;
  }
  