anchor.diff:  testnodes(NumNodes) ->
       [list_to_atom([$n | tl(integer_to_list(1000+N))]) || N <- lists:seq(1, NumNodes)].
   
  -invoke_vbmap(Nodes, NumVBuckets, NumSlaves, NumReplicas) ->
  +invoke_vbmap(Nodes, NumVBuckets, NumSlaves, NumReplicas, Tags) ->
       VbmapName =
           case erlang:system_info(system_architecture) of
               "win32" ->
  
positive.code:     DiagPath = path_config:tempfile("vbmap_diag", ""),
  
      try
          misc:executing_on_new_process(
            fun () ->
                    do_invoke_vbmap(VbmapPath, DiagPath,
                                    Nodes, NumVBuckets, NumSlaves, NumReplicas)
            end)
      after
          file:delete(DiagPath)
      end.
  
  do_invoke_vbmap(VbmapPath, DiagPath, Nodes,
                  NumVBuckets, NumSlaves, NumReplicas) ->
      NumNodes = length(Nodes),
  
      Port = erlang:open_port(
               {spawn_executable, VbmapPath},
               [stderr_to_stdout, binary,
                stream, exit_status, hide,
                {args, ["--engine", "dummy",
                        "--diag", DiagPath,
                        "--output-format", "json",
                        "--num-vbuckets", integer_to_list(NumVBuckets),
                        "--num-nodes", integer_to_list(NumNodes),
                        "--num-slaves", integer_to_list(NumSlaves),
                        "--num-replicas", integer_to_list(NumReplicas)]}]),
  
      PortResult = collect_port_output(Port),
  
      case file:read_file(DiagPath) of
          {ok, Diag} ->
  
negative.code:     NumVBuckets = length(Map),
      NumSlaves = proplists:get_value(max_slaves, Options, 10),
      NumReplicas = length(hd(Map)) - 1,
      Tags = proplists:get_value(tags, Options),
  
      GeneratedMaps0 =
          lists:append(
            %% vbmap itself randomizes some things internally so let's give it a
            %% chance
            [[invoke_vbmap(ShuffledNodes, NumVBuckets, NumSlaves, NumReplicas, Tags) ||
                 _ <- lists:seq(1, 3)] ||
                ShuffledNodes <- [misc:shuffle(KeepNodes) || _ <- lists:seq(1, 3)]]),
  
  