// Path: src/main/java/com/github/phantomthief/collection/BufferTrigger.java
// public interface BufferTrigger<E> extends AutoCloseable {
// 
//     /**
//      * 将需要定时处理的元素推入缓存.
//      *
//      * @throws IllegalStateException 当实例被关闭时，调用该方法可能会引起该异常.
//      */
//     void enqueue(E element);
// 
//     /**
//      * 手动触发一次缓存消费.
//      * <p>一般处于缓存关闭方法{@link #close()}实现中.
//      */
//     void manuallyDoTrigger();
// 
//     /**
//      * 获取当前缓存中未消费元素个数.
//      */
//     long getPendingChanges();
// 
//     /**
//      * 快捷创建{@link GenericSimpleBufferTriggerBuilder}建造器，用于构造{@link SimpleBufferTrigger}实例.
//      * <p>
//      * 推荐用该方法构造{@link SimpleBufferTrigger}实例，适用用大多数场景
//      *
//      * @param <E> 元素类型
//      * @param <C> 持有元素的容器类型，如使用默认容器实现（不指定 {@link GenericSimpleBufferTriggerBuilder#setContainerEx}），默认为 {@link ConcurrentHashMap#newKeySet()}，
//      * <p>此时本泛型可以考虑设置为 <code>Set&lt;E&gt;</code>
//      * <p>注意，强烈不建议使用默认容器，任何时候，都应该优先考虑自行设计容器类型!
//      * @return {@link GenericSimpleBufferTriggerBuilder} 实例
//      */
//     static <E, C> GenericSimpleBufferTriggerBuilder<E, C> simple() {
//         return new GenericSimpleBufferTriggerBuilder<>(SimpleBufferTrigger.newBuilder());
//     }
// 
//     /**
//      * 该方法即将废弃，可更换为{@link #simple()}.
//      */
//     @Deprecated
//     static SimpleBufferTriggerBuilder<Object, Object> simpleTrigger() {
//         return SimpleBufferTrigger.newBuilder();
//     }
// 
//     /**
//      * 提供自带背压(back-pressure)的简单批量归并消费能力.
//      * <p>
//      *
//      * <p>
//      * FIXME: 高亮注意，目前 {@link #simple()} 也提供了背压能力 {@link GenericSimpleBufferTriggerBuilder#enableBackPressure()}
//      * 所以本模式的意义已经小的多，如果没特殊情况，可以考虑都切换到 {@link SimpleBufferTrigger} 版本.
//      */
//     static <E> GenericBatchConsumerTriggerBuilder<E> batchBlocking() {
//         return new GenericBatchConsumerTriggerBuilder<>(
//                 BatchConsumeBlockingQueueTrigger.newBuilder());
//     }
// 
//     /**
//      * 该方法即将废弃，请使用{@link #batchBlocking()}替代.
//      */
//     @Deprecated
//     static BatchConsumerTriggerBuilder<Object> batchBlockingTrigger() {
//         return BatchConsumeBlockingQueueTrigger.newBuilder();
//     }
// 
//     /**
//      * 停止该实例，释放所持有资源.
//      * <p>
//      * 请注意自动关闭特性仅在处于{@code try}-with-resources时才会生效，其它场景请在服务停止的回调方法中显式调用该方法.
//      */
//     @Override
//     void close(); // override to remove throws Exception.
// }


import static com.google.common.util.concurrent.Uninterruptibles.sleepUninterruptibly;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.junit.jupiter.api.Assertions.assertFalse;
import java.util.List;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.phantomthief.collection.BufferTrigger;
package com.github.phantomthief.test;





/**
 * @author w.vela
 * Created on 2018-06-12.
 */
class BatchBlockingConflictTrigTest2 {

    private static final Logger logger = LoggerFactory
            .getLogger(BatchBlockingConflictTrigTest2.class);
    private volatile boolean check = true;
    private volatile boolean failed;
// Path: src/main/java/com/github/phantomthief/collection/BufferTrigger.java
// public interface BufferTrigger<E> extends AutoCloseable {
// 
//     /**
//      * 将需要定时处理的元素推入缓存.
//      *
//      * @throws IllegalStateException 当实例被关闭时，调用该方法可能会引起该异常.
//      */
//     void enqueue(E element);
// 
//     /**
//      * 手动触发一次缓存消费.
//      * <p>一般处于缓存关闭方法{@link #close()}实现中.
//      */
//     void manuallyDoTrigger();
// 
//     /**
//      * 获取当前缓存中未消费元素个数.
//      */
//     long getPendingChanges();
// 
//     /**
//      * 快捷创建{@link GenericSimpleBufferTriggerBuilder}建造器，用于构造{@link SimpleBufferTrigger}实例.
//      * <p>
//      * 推荐用该方法构造{@link SimpleBufferTrigger}实例，适用用大多数场景
//      *
//      * @param <E> 元素类型
//      * @param <C> 持有元素的容器类型，如使用默认容器实现（不指定 {@link GenericSimpleBufferTriggerBuilder#setContainerEx}），默认为 {@link ConcurrentHashMap#newKeySet()}，
//      * <p>此时本泛型可以考虑设置为 <code>Set&lt;E&gt;</code>
//      * <p>注意，强烈不建议使用默认容器，任何时候，都应该优先考虑自行设计容器类型!
//      * @return {@link GenericSimpleBufferTriggerBuilder} 实例
//      */
//     static <E, C> GenericSimpleBufferTriggerBuilder<E, C> simple() {
//         return new GenericSimpleBufferTriggerBuilder<>(SimpleBufferTrigger.newBuilder());
//     }
// 
//     /**
//      * 该方法即将废弃，可更换为{@link #simple()}.
//      */
//     @Deprecated
//     static SimpleBufferTriggerBuilder<Object, Object> simpleTrigger() {
//         return SimpleBufferTrigger.newBuilder();
//     }
// 
//     /**
//      * 提供自带背压(back-pressure)的简单批量归并消费能力.
//      * <p>
//      *
//      * <p>
//      * FIXME: 高亮注意，目前 {@link #simple()} 也提供了背压能力 {@link GenericSimpleBufferTriggerBuilder#enableBackPressure()}
//      * 所以本模式的意义已经小的多，如果没特殊情况，可以考虑都切换到 {@link SimpleBufferTrigger} 版本.
//      */
//     static <E> GenericBatchConsumerTriggerBuilder<E> batchBlocking() {
//         return new GenericBatchConsumerTriggerBuilder<>(
//                 BatchConsumeBlockingQueueTrigger.newBuilder());
//     }
// 
//     /**
//      * 该方法即将废弃，请使用{@link #batchBlocking()}替代.
//      */
//     @Deprecated
//     static BatchConsumerTriggerBuilder<Object> batchBlockingTrigger() {
//         return BatchConsumeBlockingQueueTrigger.newBuilder();
//     }
// 
//     /**
//      * 停止该实例，释放所持有资源.
//      * <p>
//      * 请注意自动关闭特性仅在处于{@code try}-with-resources时才会生效，其它场景请在服务停止的回调方法中显式调用该方法.
//      */
//     @Override
//     void close(); // override to remove throws Exception.
// }


// Path: src/test/java/com/github/phantomthief/test/BatchBlockingConflictTrigTest2.java
import static com.google.common.util.concurrent.Uninterruptibles.sleepUninterruptibly;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.junit.jupiter.api.Assertions.assertFalse;
import java.util.List;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.phantomthief.collection.BufferTrigger;

package com.github.phantomthief.test;





/**
 * @author w.vela
 * Created on 2018-06-12.
 */
class BatchBlockingConflictTrigTest2 {

    private static final Logger logger = LoggerFactory
            .getLogger(BatchBlockingConflictTrigTest2.class);
    private volatile boolean check = true;
    private volatile boolean failed;
    private final BufferTrigger<Integer> trigger = BufferTrigger.<Integer> batchBlocking()