anchor.diff:    }
   }
   
  -void functionalTest3() {
  +void functionalTest2() {
     var shape = [2, 2, 6, 6];
     var reductionAxis = [2];
   
  
positive.code:   }
  }
  
  void functionalTest2() {
    var shape = [2, 6, 6];
  
    var expectedValue = new tm.NDArray.generate(shape, (index) => index + 1,
            dataType: tm.NDDataType.float32)
        .toValue();
  
    NDArrayBlockedImpl array = new tm.NDArray.generate(
        shape, (index) => index + 1,
        dataType: tm.NDDataType.float32HBlocked);
  
    var value = array.identity().toValue();
  
    if (!iterableEquality.equals(value, expectedValue)) {
      throw new StateError("not equals: $value $expectedValue");
    }
  
    array = new tm.NDArray.generate(shape, (index) => index + 1,
        dataType: tm.NDDataType.float32VBlocked);
  
    value = array.identity().toValue();
  
    if (!iterableEquality.equals(value, expectedValue)) {
      throw new StateError("not equals: $value $expectedValue");
    }
  }
  
negative.code:   // performanceTest();
  }
  
  void functionalTest3() {
    var shape = [2, 2, 6, 6];
    var reductionAxis = [3];
  
    var expectedValue = new tm.NDArray.generate(shape, (index) => index + 1,
        dataType: tm.NDDataType.float32)
        .reduceSum(reductionAxis: reductionAxis)
        .toValue();
  
    var value = new tm.NDArray.generate(shape, (index) => index + 1,
        dataType: tm.NDDataType.float32HBlocked)
        .reduceSum(reductionAxis: reductionAxis)
        .toValue();
  
    if (!iterableEquality.equals(value, expectedValue)) {
      throw new StateError("not equals: $value $expectedValue");
    }
  
    value = new tm.NDArray.generate(shape, (index) => index + 1,
        dataType: tm.NDDataType.float32VBlocked)
        .reduceSum(reductionAxis: reductionAxis)
        .toValue();
  
  