You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by kx...@apache.org on 2015/07/13 20:45:12 UTC
[13/43] jiffy commit: updated refs/heads/upstream to 446e284
http://git-wip-us.apache.org/repos/asf/couchdb-jiffy/blob/11ab9738/test/jiffy_10_short_double_tests.erl
----------------------------------------------------------------------
diff --git a/test/jiffy_10_short_double_tests.erl b/test/jiffy_10_short_double_tests.erl
new file mode 100644
index 0000000..1c1d069
--- /dev/null
+++ b/test/jiffy_10_short_double_tests.erl
@@ -0,0 +1,34 @@
+% This file is part of Jiffy released under the MIT license.
+% See the LICENSE file for more information.
+
+-module(jiffy_10_short_double_tests).
+
+
+-include_lib("proper/include/proper.hrl").
+-include_lib("eunit/include/eunit.hrl").
+-include("jiffy_util.hrl").
+
+
+filename() -> "../test/cases/short-doubles.txt".
+
+
+short_double_test() ->
+ {ok, Fd} = file:open(filename(), [read, binary, raw]),
+ {"all doubles round trip", ?assertEqual(0, run(Fd, 0))}.
+
+
+run(Fd, Acc) ->
+ case file:read_line(Fd) of
+ {ok, Data} ->
+ V1 = re:replace(iolist_to_binary(Data), <<"\.\n">>, <<"">>),
+ V2 = iolist_to_binary(V1),
+ V3 = <<34, V2/binary, 34>>,
+ R = jiffy:encode(jiffy:decode(V3)),
+ case R == V3 of
+ true -> run(Fd, Acc);
+ false -> run(Fd, Acc + 1)
+ end;
+ eof ->
+ Acc
+ end.
+
http://git-wip-us.apache.org/repos/asf/couchdb-jiffy/blob/11ab9738/test/jiffy_11_proper_tests.erl
----------------------------------------------------------------------
diff --git a/test/jiffy_11_proper_tests.erl b/test/jiffy_11_proper_tests.erl
new file mode 100644
index 0000000..aca542e
--- /dev/null
+++ b/test/jiffy_11_proper_tests.erl
@@ -0,0 +1,164 @@
+% This file is part of Jiffy released under the MIT license.
+% See the LICENSE file for more information.
+
+-module(jiffy_11_proper_tests).
+
+-ifdef(JIFFY_DEV).
+
+-include_lib("proper/include/proper.hrl").
+-include_lib("eunit/include/eunit.hrl").
+-include("jiffy_util.hrl").
+
+opts() ->
+ [
+ {max_size, 15},
+ {numtests, 1000}
+ ].
+
+run(Name) ->
+ {msg("~s", [Name]), [
+ {timeout, 3600, ?_assert(proper:quickcheck(?MODULE:Name(), opts()))}
+ ]}.
+
+proper_encode_decode_test_() ->
+ {timeout, 3600, [
+ run(prop_enc_dec),
+ run(prop_enc_dec_pretty),
+ run(prop_enc_no_crash),
+ run(prop_dec_no_crash_bin),
+ run(prop_dec_no_crash_any)
+ ]}.
+
+prop_enc_dec() ->
+ ?FORALL(Data, json(),
+ begin
+ %io:format(standard_error, "Data: ~p~n", [Data]),
+ Data == jiffy:decode(jiffy:encode(Data))
+ end
+ ).
+
+-ifndef(JIFFY_NO_MAPS).
+to_map_ejson({Props}) ->
+ NewProps = [{K, to_map_ejson(V)} || {K, V} <- Props],
+ maps:from_list(NewProps);
+to_map_ejson(Vals) when is_list(Vals) ->
+ [to_map_ejson(V) || V <- Vals];
+to_map_ejson(Val) ->
+ Val.
+
+prop_map_enc_dec() ->
+ ?FORALL(Data, json(),
+ begin
+ MapData = to_map_ejson(Data),
+ MapData == jiffy:decode(jiffy:encode(MapData), [return_maps])
+ end
+ ).
+-endif.
+
+prop_enc_dec_pretty() ->
+ ?FORALL(Data, json(),
+ begin
+ Data == jiffy:decode(jiffy:encode(Data, [pretty]))
+ end
+ ).
+
+prop_enc_no_crash() ->
+ ?FORALL(Data, any(), begin catch jiffy:encode(Data), true end).
+
+prop_dec_no_crash_bin() ->
+ ?FORALL(Data, binary(), begin catch jiffy:decode(Data), true end).
+
+prop_dec_no_crash_any() ->
+ ?FORALL(Data, any(), begin catch jiffy:decode(Data), true end).
+
+
+% JSON Generation
+
+
+json_null() ->
+ null.
+
+
+json_boolean() ->
+ oneof([true, false]).
+
+
+json_number() ->
+ oneof([integer(), float()]).
+
+
+json_string() ->
+ escaped_utf8_bin().
+
+
+json_list(S) when S =< 0 ->
+ [];
+json_list(S) ->
+ ?LETSHRINK(
+ [ListSize],
+ [integer(0, S)],
+ vector(ListSize, json_text(S - ListSize))
+ ).
+
+
+json_object(S) when S =< 0 ->
+ {[]};
+json_object(S) ->
+ ?LETSHRINK(
+ [ObjectSize],
+ [integer(0, S)],
+ {vector(ObjectSize, {json_string(), json_text(S - ObjectSize)})}
+ ).
+
+
+json_value() ->
+ oneof([
+ json_null(),
+ json_boolean(),
+ json_string(),
+ json_number()
+ ]).
+
+
+json_text(S) when S > 0 ->
+ ?LAZY(oneof([
+ json_list(S),
+ json_object(S)
+ ]));
+json_text(_) ->
+ json_value().
+
+
+json() ->
+ ?SIZED(S, json_text(S)).
+
+
+%% XXX: Add generators
+%
+% We should add generators that generate JSON binaries directly
+% so we can test things that aren't produced by the encoder.
+%
+% We should also have a version of the JSON generator that inserts
+% errors into the JSON that we can test for.
+
+
+escaped_utf8_bin() ->
+ ?SUCHTHAT(Bin,
+ ?LET(S, ?SUCHTHAT(L, list(escaped_char()), L /= []),
+ unicode:characters_to_binary(S, unicode, utf8)),
+ is_binary(Bin)
+ ).
+
+
+escaped_char() ->
+ ?LET(C, char(),
+ case C of
+ $" -> "\\\"";
+ C when C == 65534 -> 65533;
+ C when C == 65535 -> 65533;
+ C when C > 1114111 -> 1114111;
+ C -> C
+ end
+ ).
+
+-endif.
http://git-wip-us.apache.org/repos/asf/couchdb-jiffy/blob/11ab9738/test/jiffy_tests.erl
----------------------------------------------------------------------
diff --git a/test/jiffy_tests.erl b/test/jiffy_tests.erl
deleted file mode 100644
index 9ecea32..0000000
--- a/test/jiffy_tests.erl
+++ /dev/null
@@ -1,153 +0,0 @@
-% This file is part of Jiffy released under the MIT license.
-% See the LICENSE file for more information.
-
--module(jiffy_tests).
-
--ifdef(JIFFY_DEV).
-
--include_lib("proper/include/proper.hrl").
--include_lib("eunit/include/eunit.hrl").
-
-
-proper_test_() ->
- PropErOpts = [
- {to_file, user},
- {max_size, 15},
- {numtests, 1000}
- ],
- {timeout, 3600, ?_assertEqual([], proper:module(jiffy_tests, PropErOpts))}.
-
-
-prop_encode_decode() ->
- ?FORALL(Data, json(),
- begin
- %io:format(standard_error, "Data: ~p~n", [Data]),
- Data == jiffy:decode(jiffy:encode(Data))
- end
- ).
-
--ifndef(JIFFY_NO_MAPS).
-to_map_ejson({Props}) ->
- NewProps = [{K, to_map_ejson(V)} || {K, V} <- Props],
- maps:from_list(NewProps);
-to_map_ejson(Vals) when is_list(Vals) ->
- [to_map_ejson(V) || V <- Vals];
-to_map_ejson(Val) ->
- Val.
-
-prop_map_encode_decode() ->
- ?FORALL(Data, json(),
- begin
- MapData = to_map_ejson(Data),
- MapData == jiffy:decode(jiffy:encode(MapData), [return_maps])
- end
- ).
--endif.
-
-prop_encode_decode_pretty() ->
- ?FORALL(Data, json(),
- begin
- Data == jiffy:decode(jiffy:encode(Data, [pretty]))
- end
- ).
-
-prop_encode_not_crash() ->
- ?FORALL(Data, any(), begin catch jiffy:encode(Data), true end).
-
-prop_decode_not_crash_bin() ->
- ?FORALL(Data, binary(), begin catch jiffy:decode(Data), true end).
-
-prop_decode_not_crash_any() ->
- ?FORALL(Data, any(), begin catch jiffy:decode(Data), true end).
-
-
-% JSON Generation
-
-
-json_null() ->
- null.
-
-
-json_boolean() ->
- oneof([true, false]).
-
-
-json_number() ->
- oneof([integer(), float()]).
-
-
-json_string() ->
- escaped_utf8_bin().
-
-
-json_list(S) when S =< 0 ->
- [];
-json_list(S) ->
- ?LETSHRINK(
- [ListSize],
- [integer(0, S)],
- vector(ListSize, json_text(S - ListSize))
- ).
-
-
-json_object(S) when S =< 0 ->
- {[]};
-json_object(S) ->
- ?LETSHRINK(
- [ObjectSize],
- [integer(0, S)],
- {vector(ObjectSize, {json_string(), json_text(S - ObjectSize)})}
- ).
-
-
-json_value() ->
- oneof([
- json_null(),
- json_boolean(),
- json_string(),
- json_number()
- ]).
-
-
-json_text(S) when S > 0 ->
- ?LAZY(oneof([
- json_list(S),
- json_object(S)
- ]));
-json_text(_) ->
- json_value().
-
-
-json() ->
- ?SIZED(S, json_text(S)).
-
-
-%% XXX: Add generators
-%
-% We should add generators that generate JSON binaries directly
-% so we can test things that aren't produced by the encoder.
-%
-% We should also have a version of the JSON generator that inserts
-% errors into the JSON that we can test for.
-
-
-escaped_utf8_bin() ->
- ?SUCHTHAT(Bin,
- ?LET(S, ?SUCHTHAT(L, list(escaped_char()), L /= []),
- unicode:characters_to_binary(S, unicode, utf8)),
- is_binary(Bin)
- ).
-
-
-escaped_char() ->
- ?LET(C, char(),
- case C of
- $" -> "\\\"";
- C when C == 65534 -> 65533;
- C when C == 65535 -> 65533;
- C when C > 1114111 -> 1114111;
- C -> C
- end
- ).
-
--endif.
http://git-wip-us.apache.org/repos/asf/couchdb-jiffy/blob/11ab9738/test/jiffy_util.hrl
----------------------------------------------------------------------
diff --git a/test/jiffy_util.hrl b/test/jiffy_util.hrl
new file mode 100644
index 0000000..b8210e2
--- /dev/null
+++ b/test/jiffy_util.hrl
@@ -0,0 +1,25 @@
+
+msg(Fmt, Args) ->
+ M1 = io_lib:format(Fmt, Args),
+ M2 = re:replace(M1, <<"\r">>, <<"\\\\r">>, [global]),
+ M3 = re:replace(M2, <<"\n">>, <<"\\\\n">>, [global]),
+ M4 = re:replace(M3, <<"\t">>, <<"\\\\t">>, [global]),
+ iolist_to_binary(M4).
+
+
+hex(Bin) when is_binary(Bin) ->
+ H1 = [io_lib:format("16#~2.16.0B",[X]) || <<X:8>> <= Bin],
+ H2 = string:join(H1, ", "),
+ lists:flatten(io_lib:format("<<~s>>", [lists:flatten(H2)])).
+
+
+dec(V) ->
+ jiffy:decode(V).
+
+
+enc(V) ->
+ iolist_to_binary(jiffy:encode(V)).
+
+
+enc(V, Opts) ->
+ iolist_to_binary(jiffy:encode(V, Opts)).
http://git-wip-us.apache.org/repos/asf/couchdb-jiffy/blob/11ab9738/test/util.erl
----------------------------------------------------------------------
diff --git a/test/util.erl b/test/util.erl
deleted file mode 100644
index ceaef89..0000000
--- a/test/util.erl
+++ /dev/null
@@ -1,44 +0,0 @@
--module(util).
--export([test_good/1, test_good/2, test_errors/1]).
-
-test_good(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).
-
-ok_dec(J, _E) ->
- lists:flatten(io_lib:format("Decoded ~p.", [J])).
-
-ok_enc(E, _J) ->
- lists:flatten(io_lib:format("Encoded ~p", [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}, Options) ->
- etap:is(jiffy:decode(J), E, ok_dec(J, E)),
- 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, Options), J2, ok_enc(E, J2)).
-
-check_error({J, E}) ->
- etap:fun_is(
- fun({error, E1}) when E1 == E -> true; (E1) -> E1 end,
- (catch jiffy:decode(J)),
- error_mesg(J)
- );
-check_error(J) ->
- etap:fun_is(
- fun({error, _}) -> true; (Else) -> Else end,
- (catch jiffy:decode(J)),
- error_mesg(J)
- ).
-