@Test
  public void testProcessProductWithMaskAndSuperSampling() throws Exception {
    int superSampling = 3;
    BinningContext ctx = createValidCtx(superSampling, null);
    VariableContextImpl variableContext = (VariableContextImpl) ctx.getVariableContext();
    variableContext.setMaskExpr("floor(X) % 2");
    Product product = createProduct();

    MySpatialBinConsumer mySpatialBinConsumer = new MySpatialBinConsumer();
    SpatialBinner spatialBinner = new SpatialBinner(ctx, mySpatialBinConsumer);
    long numObservations =
        SpatialProductBinner.processProduct(
            product, spatialBinner, new HashMap<Product, List<Band>>(), ProgressMonitor.NULL);
    assertEquals(32 / 2 * 256 * superSampling * superSampling, numObservations);
    assertEquals(numObservations, mySpatialBinConsumer.numObs);
  }
  private static BinningContext createValidCtx(int superSampling, DataPeriod dataPeriod) {
    VariableContextImpl variableContext = new VariableContextImpl();
    variableContext.setMaskExpr("!invalid");
    variableContext.defineVariable("invalid", "0");
    variableContext.defineVariable("a", "2.4");
    variableContext.defineVariable("b", "1.8");

    PlanetaryGrid planetaryGrid = new SEAGrid(6);
    BinManager binManager =
        new BinManager(
            variableContext,
            new AggregatorAverage(variableContext, "a", 0.0),
            new AggregatorAverage(variableContext, "b", 0.0));

    return new BinningContextImpl(
        planetaryGrid, binManager, CompositingType.BINNING, superSampling, dataPeriod, null);
  }