     IO.puts("    -c          : operate on sets of characters instead of sets of strings")
     IO.puts("    --strip     : strip leading and trailing whitespace from set items")
     IO.puts("    -s          : strip leading and trailing whitespace from set items")
+    IO.puts("    --benchmark : perform algorithm benchmark")
+    IO.puts("    -b          : perform algorithm benchmark")
     IO.puts("    --help      : display this usage summary")
     IO.puts("    -?          : display this usage summary")
     IO.puts("Examples:")

      token: ",",
      character: false,
      strip: false,
      help: false,
    ]
    switches = [
      token: :string,
      character: :boolean,
      strip: :boolean,
      help: :boolean,
    ]
    aliases = [
      t: :token,
      c: :character,
      s: :strip,
      "?": :help,
    ]
    {parsed, remaining, invalid} = OptionParser.parse(args, strict: switches, aliases: aliases)

    strip = pOptions[:strip]
    pSetList
    |> Enum.map(&stringToSet(&1, token, character, strip))
    |> Enum.reduce([], &CustomSet.symmetricDifference_DifferenceUnion/2)
    |> Enum.sort
    |> Enum.each(&IO.puts/1)
  end

  def benchmark() do
    range_max = 1000000
    input_max = 12
    range = 0..range_max
    input = 1..input_max
    |> Enum.map(&(range |> Enum.take_every(&1)))
    Benchmark.measure(fn -> input |> Enum.reduce([], &CustomSet.symmetricDifference_IntersectionDifference/2) end)
    |> fn time -> IO.puts("Intersection Difference : #{time} seconds") end.()
    Benchmark.measure(fn -> input |> Enum.reduce([], &CustomSet.symmetricDifference_DifferenceUnion/2) end)
    |> fn time -> IO.puts("Difference Union        : #{time} seconds") end.()
  end
end

