anchor.diff:              [111, 888, 999, 222],
               [301, 403, 501, 607],
             ], headerExists: false),
  +          DataFrame(<Iterable<num>>[[]], headerExists: false),
  +        ],
  +      };
  +
  +      validator.evaluate(
  +        (observations, outcomes) {
  +          expect(
  +            observations.toMatrix(),
  +            equals(dataPreprocessFnResponse[iterationCounter++][0].toMatrix()),
  +          );
  +          return predictor;
  +        },
  +        metric,
  +        dataPreprocessFn: (trainData, testData) =>
  +          dataPreprocessFnResponse[iterationCounter],
  +      );
  +    });
  +
  +    test('should take the second element as test samples from data '
  +        'preprocessing callback response while evaluating a predictor', () {
  +      final allObservations = DataFrame(
  +        [<num>[1, 1, 1, 1]],
  +        header: ['first', 'second', 'third', 'target'],
  +        headerExists: false,
  +      );
  +
  +      final metric = MetricType.mape;
  +      final splitter = createSplitter([[0], [0], [0]]);
  +      final predictor = AssessableMock();
  +      final validator = CrossValidatorImpl(allObservations,
  +          ['target'], splitter, DType.float32);
  +
  +      when(predictor.assess(any, any, any)).thenReturn(1);
  +
  +      int iterationCounter = 0;
  +
  +      final dataPreprocessFnResponse = <int, List<DataFrame>>{
  +        0: [
  +          DataFrame(<Iterable<num>>[[]], headerExists: false),
  +          DataFrame(<Iterable<num>>[
  +            [14, 50, 39, 24],
  +            [77, 38, 29, 70],
  +          ], headerExists: false),
  +        ],
  +        1: [
  +          DataFrame(<Iterable<num>>[[]], headerExists: false),
  +          DataFrame(<Iterable<num>>[
  +            [154, 550, 939, 124],
  +          ], headerExists: false),
  +        ],
  +        2: [
  +          DataFrame(<Iterable<num>>[[]], headerExists: false),
             DataFrame(<Iterable<num>>[
               [44, 55, 66, 11],
               [29, 22, 11,  0],
  
positive.code:             [1, 2, 3, 4],
              [7, 8, 9, 0],
            ], headerExists: false),
            DataFrame(<Iterable<num>>[
              [14, 50, 39, 24],
              [77, 38, 29, 70],
            ], headerExists: false),
          ],
          1: [
            DataFrame(<Iterable<num>>[
              [100, 200, 300, 400],
              [117, 118, 119, 110],
            ], headerExists: false),
            DataFrame(<Iterable<num>>[
              [154, 550, 939, 124],
            ], headerExists: false),
          ],
          2: [
            DataFrame(<Iterable<num>>[
  
negative.code:       verificationResult.called(2);
      });
  
      test('should take the first element as train samples from data '
          'preprocessing callback response while evaluating a predictor', () {
        final allObservations = DataFrame(
          <Iterable<num>>[
            [1, 1, 1, 1],
  