@Setup
  public void setup() {

    // sets up a ShapeMap and a HashMap with 1_000_000 keys each
    //
    // {
    //   :k0 -> v0
    //   :k0 -> v1
    //   ...
    //   :k999999 -> v999999
    // }
    //
    // Benchmarks access key 123456

    // HashMap
    hashMap = Util.hashMapRange(1_000_000);

    // ShapeMap
    shapeMap = new ShapeMap<>(hashMap);

    k = ShapeKey.get("k123456");
    a = ShapeMap.accessor(k);

    // learn the location once
    a.get(shapeMap);

    // over-trained accessor
    fa = Util.fallbackAccessor(k);
  }
 @Benchmark
 public Object accessor_set() {
   a.set(shapeMap, "vn1");
   return a;
 }
 @Benchmark
 public String acessor_put() {
   return a.put(shapeMap, "vn1");
 }
 @Benchmark
 public String fallback_accessor_get() {
   return fa.get(shapeMap);
 }
 @Benchmark
 public String shapeMap_geta() {
   return a.get(shapeMap);
 }
 @Benchmark
 public String accessor_get() {
   return a.get(shapeMap);
 }