Fix uescape encoding bug

The encoding length for unicode values was applied to the wrong index
variable.

Thanks to Paul Guyot for the detailed bug report and fix.

Fixes #7
diff --git a/c_src/encoder.c b/c_src/encoder.c
index 7d9d321..c46c12d 100644
--- a/c_src/encoder.c
+++ b/c_src/encoder.c
@@ -242,7 +242,7 @@
                     if(uval < 0) {
                         return 0;
                     }
-                    ulen = utf8_esc_len(uval);
+                    esc_extra = utf8_esc_len(uval);
                     if(ulen < 0) {
                         return 0;
                     }
diff --git a/test/004-strings.t b/test/004-strings.t
index 00d87e4..6a69586 100755
--- a/test/004-strings.t
+++ b/test/004-strings.t
@@ -6,8 +6,9 @@
     code:add_pathz("ebin"),
     code:add_pathz("test"),
     
-    etap:plan(76),
+    etap:plan(78),
     util:test_good(good()),
+    util:test_good(uescaped(), [uescape]),
     util:test_errors(errors()),
     
     test_utf8(utf8_cases()),
@@ -30,6 +31,14 @@
         }
     ].
 
+uescaped() ->
+    [
+        {
+            <<"\"\\u8CA8\\u5481\\u3002\\u0091\\u0091\"">>,
+            <<232,178,168,229,146,129,227,128,130,194,145,194,145>>
+        }
+    ].
+
 errors() ->
     [
         <<"\"foo">>,
diff --git a/test/util.erl b/test/util.erl
index b05edc9..ceaef89 100644
--- a/test/util.erl
+++ b/test/util.erl
@@ -1,8 +1,11 @@
 -module(util).
--export([test_good/1, test_errors/1]).
+-export([test_good/1, test_good/2, test_errors/1]).
 
 test_good(Cases) ->
-    lists:foreach(fun(Case) -> check_good(Case) end, Cases).
+    test_good(Cases, []).
+
+test_good(Cases, Options) ->
+    lists:foreach(fun(Case) -> check_good(Case, Options) end, Cases).
 
 test_errors(Cases) ->
     lists:foreach(fun(Case) -> check_error(Case) end, Cases).
@@ -13,18 +16,18 @@
 ok_enc(E, _J) ->
     lists:flatten(io_lib:format("Encoded ~p", [E])).
 
-do_encode(E) ->
-    iolist_to_binary(jiffy:encode(E)).
+do_encode(E, Options) ->
+    iolist_to_binary(jiffy:encode(E, Options)).
 
 error_mesg(J) ->
     lists:flatten(io_lib:format("Decoding ~p returns an error.", [J])).
 
-check_good({J, E}) ->
+check_good({J, E}, Options) ->
     etap:is(jiffy:decode(J), E, ok_dec(J, E)),
-    etap:is(do_encode(E), J, ok_enc(E, J));
-check_good({J, E, J2}) ->
+    etap:is(do_encode(E, Options), J, ok_enc(E, J));
+check_good({J, E, J2}, Options) ->
     etap:is(jiffy:decode(J), E, ok_dec(J, E)),
-    etap:is(do_encode(E), J2, ok_enc(E, J2)).
+    etap:is(do_encode(E, Options), J2, ok_enc(E, J2)).
 
 check_error({J, E}) ->
     etap:fun_is(