   end
 
   test "encode then decode is identity" do
-    for {encode, decode} <- [{&encode16/2, &decode16!/2},
-                             {&encode32/2, &decode32!/2},
-                             {&hex_encode32/2, &hex_decode32!/2},
-                             {&encode64/2, &decode64!/2},
-                             {&url_encode64/2, &url_decode64!/2}],
+    for {encode, decode} <- [
+          {&encode16/2, &decode16!/2},
+          {&encode32/2, &decode32!/2},
+          {&hex_encode32/2, &hex_decode32!/2},
+          {&encode64/2, &decode64!/2},
+          {&url_encode64/2, &url_decode64!/2}
+        ],
         encode_case <- [:upper, :lower],
         decode_case <- [:upper, :lower, :mixed],
-        (encode_case == decode_case) or (decode_case == :mixed),
+        encode_case == decode_case or decode_case == :mixed,
         pad? <- [true, false],
         len <- 0..256 do
       data =


      expected =
        data
        |> encode.([case: encode_case, pad: pad?])
        |> decode.([case: decode_case, pad: pad?])

      assert data == expected, "identity did not match for #{inspect data} when #{inspect encode} (#{encode_case})"
    end
  end
end


  test "decode64/1 errors on whitespace unless there's ignore: :whitespace" do
    assert :error == decode64("\nQWxhZGRp bjpvcGVu\sIHNlc2Ft\t")

    assert {:ok, "Aladdin:open sesam"} ==
             decode64("\nQWxhZGRp bjpvcGVu\sIHNlc2Ft\t", ignore: :whitespace)
  end

  test "decode64!/1 errors on whitespace unless there's ignore: :whitespace" do
    assert_raise ArgumentError, "non-alphabet digit found: \"\\n\" (byte 10)", fn ->
      decode64!("\nQWxhZGRp bjpvcGVu\sIHNlc2Ft\t")
    end

    assert "Aladdin:open sesam" ==
             decode64!("\nQWxhZGRp bjpvcGVu\sIHNlc2Ft\t", ignore: :whitespace)
  end

  test "decode64/1 errors on incorrect padding" do
