Пример #1
0
 @Warmup(iterations = 50)
 @Measurement(iterations = 25)
 @Benchmark
 public void parallel_lazy_scala() {
   CountScalaTest.parallel_lazy_scala();
 }
Пример #2
0
  @Setup(Level.Trial)
  public void setUp_megamorphic() {
    if (this.megamorphicWarmupLevel > 0) {
      // serial, lazy, JDK
      {
        long evens = this.integersJDK.stream().filter(each -> each % 2 == 0).count();
        Assert.assertEquals(SIZE / 2, evens);
        long odds = this.integersJDK.stream().filter(each -> each % 2 == 1).count();
        Assert.assertEquals(SIZE / 2, odds);
        long evens2 = this.integersJDK.stream().filter(each -> (each & 1) == 0).count();
        Assert.assertEquals(SIZE / 2, evens2);
      }

      // parallel, lazy, JDK
      {
        long evens = this.integersJDK.parallelStream().filter(each -> each % 2 == 0).count();
        Assert.assertEquals(SIZE / 2, evens);
        long odds = this.integersJDK.parallelStream().filter(each -> each % 2 == 1).count();
        Assert.assertEquals(SIZE / 2, odds);
        long evens2 = this.integersJDK.parallelStream().filter(each -> (each & 1) == 0).count();
        Assert.assertEquals(SIZE / 2, evens2);
      }

      // serial, lazy, GSC
      {
        long evens = this.integersGSC.asLazy().count(each -> each % 2 == 0);
        Assert.assertEquals(SIZE / 2, evens);
        long odds = this.integersGSC.asLazy().count(each -> each % 2 == 1);
        Assert.assertEquals(SIZE / 2, odds);
        long evens2 = this.integersGSC.asLazy().count(each -> (each & 1) == 0);
        Assert.assertEquals(SIZE / 2, evens2);
      }

      // parallel, lazy, GSC
      {
        long evens =
            this.integersGSC
                .asParallel(this.executorService, BATCH_SIZE)
                .count(each -> each % 2 == 0);
        Assert.assertEquals(SIZE / 2, evens);
        long odds =
            this.integersGSC
                .asParallel(this.executorService, BATCH_SIZE)
                .count(each -> each % 2 == 1);
        Assert.assertEquals(SIZE / 2, odds);
        long evens2 =
            this.integersGSC
                .asParallel(this.executorService, BATCH_SIZE)
                .count(each -> (each & 1) == 0);
        Assert.assertEquals(SIZE / 2, evens2);
      }

      // serial, eager, GSC
      {
        long evens = this.integersGSC.count(each -> each % 2 == 0);
        Assert.assertEquals(SIZE / 2, evens);
        long odds = this.integersGSC.count(each -> each % 2 == 1);
        Assert.assertEquals(SIZE / 2, odds);
        long evens2 = this.integersGSC.count(each -> (each & 1) == 0);
        Assert.assertEquals(SIZE / 2, evens2);
      }

      // parallel, eager, GSC
      long evens = ParallelIterate.count(this.integersGSC, each -> each % 2 == 0);
      Assert.assertEquals(SIZE / 2, evens);
      long odds = ParallelIterate.count(this.integersGSC, each -> each % 2 == 1);
      Assert.assertEquals(SIZE / 2, odds);
      long evens2 = ParallelIterate.count(this.integersGSC, each -> (each & 1) == 0);
      Assert.assertEquals(SIZE / 2, evens2);
    }

    if (this.megamorphicWarmupLevel > 1) {
      // stream().mapToLong().reduce()
      Assert.assertEquals(
          500001500000L,
          this.integersJDK
              .stream()
              .mapToLong(each -> each + 1)
              .reduce(0, (accum, each) -> accum + each));

      Assert.assertEquals(
          500002500000L,
          this.integersJDK
              .stream()
              .mapToLong(each -> each + 2)
              .reduce(
                  0,
                  (accum, each) -> {
                    Assert.assertTrue(each >= 0);
                    return accum + each;
                  }));

      Assert.assertEquals(
          500003500000L,
          this.integersJDK
              .stream()
              .mapToLong(each -> each + 3)
              .reduce(
                  0,
                  (accum, each) -> {
                    long result = accum + each;
                    Assert.assertTrue(each >= 0);
                    return result;
                  }));

      // parallelStream().mapToLong().reduce()
      Assert.assertEquals(
          500001500000L,
          this.integersJDK
              .parallelStream()
              .mapToLong(each -> each + 1)
              .reduce(0, (accum, each) -> accum + each));

      Assert.assertEquals(
          500002500000L,
          this.integersJDK
              .parallelStream()
              .mapToLong(each -> each + 2)
              .reduce(
                  0,
                  (accum, each) -> {
                    Assert.assertTrue(each >= 0);
                    return accum + each;
                  }));

      Assert.assertEquals(
          500003500000L,
          this.integersJDK
              .parallelStream()
              .mapToLong(each -> each + 3)
              .reduce(
                  0,
                  (accum, each) -> {
                    long result = accum + each;
                    Assert.assertTrue(each >= 0);
                    return result;
                  }));
    }

    if (this.megamorphicWarmupLevel > 2) {
      this.integersGSC.asLazy().forEach(Procedures.cast(Assert::assertNotNull));
      this.integersGSC.asLazy().forEach(Procedures.cast(each -> Assert.assertEquals(each, each)));
      this.integersGSC.asLazy().forEach(new CountProcedure<>());

      this.integersGSC.asParallel(this.executorService, BATCH_SIZE).forEach(Assert::assertNotNull);
      this.integersGSC
          .asParallel(this.executorService, BATCH_SIZE)
          .forEach(each -> Assert.assertEquals(each, each));
      this.integersGSC.asParallel(this.executorService, BATCH_SIZE).forEach(new CountProcedure<>());

      this.integersJDK.stream().forEach(Assert::assertNotNull);
      this.integersJDK.stream().forEach(each -> Assert.assertEquals(each, each));

      this.integersJDK.parallelStream().forEach(Assert::assertNotNull);
      this.integersJDK.parallelStream().forEach(each -> Assert.assertEquals(each, each));
    }

    CountScalaTest.megamorphic(this.megamorphicWarmupLevel);
  }
Пример #3
0
 @Warmup(iterations = 20)
 @Measurement(iterations = 10)
 @Benchmark
 public void serial_lazy_scala() {
   CountScalaTest.serial_lazy_scala();
 }