@Test(dataProvider = "testData")
  public void testIntervalPairFilter(
      final List<Interval> intervals, final long expectedPassingRecords) {
    final IntervalKeepPairFilter filter = new IntervalKeepPairFilter(intervals);

    long actualPassingRecords =
        StreamSupport.stream(builder.spliterator(), false)
            .filter(rec -> !filter.filterOut(rec))
            .count();

    Assert.assertEquals(actualPassingRecords, expectedPassingRecords);
  }
  @Test
  public void testNotPrimaryReads() {
    final List<Interval> intervalList = new ArrayList<>();
    final Interval interval1 = new Interval("chr1", 1, 999);
    intervalList.add(interval1);

    final IntervalKeepPairFilter filter = new IntervalKeepPairFilter(intervalList);

    boolean notPrimary =
        StreamSupport.stream(builder.spliterator(), false)
            .filter(rec -> !filter.filterOut(rec))
            .anyMatch(
                rec -> rec.getNotPrimaryAlignmentFlag() || rec.getSupplementaryAlignmentFlag());

    Assert.assertFalse(notPrimary);
  }
  @Test
  public void testUnmappedPair() {
    final List<Interval> intervalList = new ArrayList<>();

    final Interval interval1 = new Interval("chr1", 1, 999);
    final Interval interval2 = new Interval("chr3", 1, 2);
    final Interval interval3 = new Interval("chr2", 1, 2);
    final Interval interval4 = new Interval("chr4", 1, 2);

    intervalList.addAll(CollectionUtil.makeList(interval1, interval2, interval3, interval4));

    final IntervalKeepPairFilter filter = new IntervalKeepPairFilter(intervalList);

    boolean unmappedPassed =
        StreamSupport.stream(builder.spliterator(), false)
            .filter(rec -> !filter.filterOut(rec))
            .anyMatch(rec -> rec.getReadName().equals("both_unmapped"));

    Assert.assertFalse(unmappedPassed);
  }