package com.ak.util;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.LongAccumulator;
import java.util.function.UnaryOperator;
import java.util.stream.Stream;

import org.testng.Assert;
import org.testng.annotations.Test;

public class LongAccumulatorTest {
  @Test
  public void test() {
    int n = 50;
    LongAccumulator balance = new LongAccumulator(Long::sum, 0L);
    ExecutorService executorService = Executors.newFixedThreadPool(n);
    Stream.iterate((Runnable) () -> balance.accumulate(1000L), UnaryOperator.identity()).limit(n).forEach(executorService::submit);
    executorService.shutdown();
    Assert.assertEquals(balance.get(), n * 1000L);
  }
}