// Path: ddth-id-core/src/main/java/com/github/ddth/id/InmemIdGenerator.java
// public class InmemIdGenerator extends SerialIdGenerator {
// 
//     private static Logger LOGGER = LoggerFactory.getLogger(InmemIdGenerator.class);
// 
//     private LoadingCache<String, AtomicLong> counters;
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     public InmemIdGenerator init() {
//         if (counters == null) {
//             counters = CacheBuilder.newBuilder().build(new CacheLoader<String, AtomicLong>() {
//                 @Override
//                 public AtomicLong load(String key) throws Exception {
//                     return new AtomicLong(0);
//                 }
//             });
//         }
// 
//         super.init();
// 
//         return this;
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     public void destroy() {
//         try {
//             super.destroy();
//         } catch (Exception e) {
//             LOGGER.warn(e.getMessage(), e);
//         }
// 
//         if (counters != null) {
//             try {
//                 counters.invalidateAll();
//             } catch (Exception e) {
//                 LOGGER.warn(e.getMessage(), e);
//             } finally {
//                 counters = null;
//             }
//         }
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     public long nextId(String namespace) {
//         try {
//             return counters.get(namespace).incrementAndGet();
//         } catch (ExecutionException e) {
//             LOGGER.warn(e.getMessage(), e);
//             return -1;
//         }
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     public long currentId(String namespace) {
//         try {
//             return counters.get(namespace).get();
//         } catch (ExecutionException e) {
//             LOGGER.warn(e.getMessage(), e);
//             return -1;
//         }
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     public boolean setValue(String namespace, long value) {
//         if (value < 0) {
//             throw new IdException("Id value must be greater or equal to 0!");
//         }
//         try {
//             counters.get(namespace).set(value);
//             return true;
//         } catch (ExecutionException e) {
//             LOGGER.warn(e.getMessage(), e);
//             return false;
//         }
//     }
// }


import java.sql.SQLException;
import com.github.ddth.id.InmemIdGenerator;
package com.github.ddth.id.test.benchmark;



public class BenchmarkInmem extends BaseBenchmarkSerialId {

    public static void main(String[] args) throws SQLException, InterruptedException {
        int numRuns, numThreads, numNamespaces;

        try {
            numRuns = Integer.parseInt(System.getProperty("numRuns"));
        } catch (Exception e) {
            numRuns = 512000;
        }
        try {
            numThreads = Integer.parseInt(System.getProperty("numThreads"));
        } catch (Exception e) {
            numThreads = 8;
        }
        try {
            numNamespaces = Integer.parseInt(System.getProperty("numNamespaces"));
        } catch (Exception e) {
            numNamespaces = 4;
        }

// Path: ddth-id-core/src/main/java/com/github/ddth/id/InmemIdGenerator.java
// public class InmemIdGenerator extends SerialIdGenerator {
// 
//     private static Logger LOGGER = LoggerFactory.getLogger(InmemIdGenerator.class);
// 
//     private LoadingCache<String, AtomicLong> counters;
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     public InmemIdGenerator init() {
//         if (counters == null) {
//             counters = CacheBuilder.newBuilder().build(new CacheLoader<String, AtomicLong>() {
//                 @Override
//                 public AtomicLong load(String key) throws Exception {
//                     return new AtomicLong(0);
//                 }
//             });
//         }
// 
//         super.init();
// 
//         return this;
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     public void destroy() {
//         try {
//             super.destroy();
//         } catch (Exception e) {
//             LOGGER.warn(e.getMessage(), e);
//         }
// 
//         if (counters != null) {
//             try {
//                 counters.invalidateAll();
//             } catch (Exception e) {
//                 LOGGER.warn(e.getMessage(), e);
//             } finally {
//                 counters = null;
//             }
//         }
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     public long nextId(String namespace) {
//         try {
//             return counters.get(namespace).incrementAndGet();
//         } catch (ExecutionException e) {
//             LOGGER.warn(e.getMessage(), e);
//             return -1;
//         }
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     public long currentId(String namespace) {
//         try {
//             return counters.get(namespace).get();
//         } catch (ExecutionException e) {
//             LOGGER.warn(e.getMessage(), e);
//             return -1;
//         }
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     public boolean setValue(String namespace, long value) {
//         if (value < 0) {
//             throw new IdException("Id value must be greater or equal to 0!");
//         }
//         try {
//             counters.get(namespace).set(value);
//             return true;
//         } catch (ExecutionException e) {
//             LOGGER.warn(e.getMessage(), e);
//             return false;
//         }
//     }
// }


// Path: ddth-id-core/src/test/java/com/github/ddth/id/test/benchmark/BenchmarkInmem.java
import java.sql.SQLException;
import com.github.ddth.id.InmemIdGenerator;

package com.github.ddth.id.test.benchmark;



public class BenchmarkInmem extends BaseBenchmarkSerialId {

    public static void main(String[] args) throws SQLException, InterruptedException {
        int numRuns, numThreads, numNamespaces;

        try {
            numRuns = Integer.parseInt(System.getProperty("numRuns"));
        } catch (Exception e) {
            numRuns = 512000;
        }
        try {
            numThreads = Integer.parseInt(System.getProperty("numThreads"));
        } catch (Exception e) {
            numThreads = 8;
        }
        try {
            numNamespaces = Integer.parseInt(System.getProperty("numNamespaces"));
        } catch (Exception e) {
            numNamespaces = 4;
        }

        try (InmemIdGenerator idGen = new InmemIdGenerator()) {