Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:19
msgpack-erlang
msgpack-erlang-0.8.1-git.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File msgpack-erlang-0.8.1-git.patch of Package msgpack-erlang
diff --git a/.github/workflows/checkall.yml b/.github/workflows/checkall.yml index f02b103..809cebb 100644 --- a/.github/workflows/checkall.yml +++ b/.github/workflows/checkall.yml @@ -10,7 +10,7 @@ jobs: build: strategy: matrix: - version: [22, 23, 24, 25] + version: [22, 23, 24, 25, 26] runs-on: ubuntu-latest container: @@ -21,6 +21,6 @@ jobs: - name: Compile run: rebar3 compile - name: Test - run: rebar3 eunit + run: rebar3 do eunit, proper - name: Check run: rebar3 do xref, dialyzer diff --git a/eqc/msgpack_eqc.erl b/eqc/msgpack_eqc.erl deleted file mode 100644 index f82099c..0000000 --- a/eqc/msgpack_eqc.erl +++ /dev/null @@ -1,110 +0,0 @@ -%% -%% MessagePack for Erlang -%% -%% Copyright (C) 2009-2014 UENISHI Kota -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. -%% - --module(msgpack_eqc). - - --ifdef(TEST). --ifdef(EQC). - --compile(export_all). --include_lib("eqc/include/eqc.hrl"). --include_lib("eunit/include/eunit.hrl"). - --define(NUMTESTS, 16). --define(QC_OUT(P), - eqc:on_output(fun(Str, Args) -> - io:format(user, Str, Args) end, P)). --define(_assertProp(S), - {timeout, ?NUMTESTS * 10, - ?_assert(quickcheck(numtests(?NUMTESTS, ?QC_OUT(S))))}). - -eqc_test_() -> - {inparallel, - [ - ?_assertProp(prop_msgpack()), - ?_assertProp(prop_msgpack([{format, jiffy}])), - ?_assertProp(prop_msgpack([{format, jsx}])) - ]}. - -prop_msgpack() -> - ?FORALL(Obj, msgpack_object(), - begin - {ok, Obj} =:= msgpack:unpack(msgpack:pack(Obj)) - end). - -prop_msgpack(Options) -> - ?FORALL(Obj, msgpack_object(), - begin - {ok, Obj} =:= msgpack:unpack(msgpack:pack(Obj, Options), Options) - end). - -msgpack_object() -> - oneof(container_types() ++ primitive_types()). - -container_types() -> - [ fix_array(), array16() ]. -%% TODO: add map - -primitive_types() -> - [null(), - positive_fixnum(), negative_fixnum(), - int8(), int16(), int32(), int64(), - uint8(), uint16(), uint32(), uint64(), - eqc_gen:real(), eqc_gen:bool(), - fix_raw(), raw16(), raw32() - ]. - %% fix_raw(), raw16(), raw32()]). - -positive_fixnum() -> choose(0, 127). -negative_fixnum() -> choose(-32, -1). - -int8() -> choose(-16#80, 16#7F). -int16() -> oneof([choose(-16#8000, -16#81), - choose(16#80, 16#7FFF)]). -int32() -> oneof([choose(-16#80000000, -16#8001), - choose(16#10000, 16#7FFFFFFF)]). -int64() -> oneof([choose(-16#8000000000000000, -16#80000001), - choose(16#100000000, 16#7FFFFFFFFFFFFFFF)]). - -uint8() -> choose(0, 16#FF). -uint16() -> choose(16#100, 16#FFFF). -uint32() -> choose(16#10000, 16#FFFFFFFF). -uint64() -> choose(16#100000000, 16#FFFFFFFFFFFFFFFF). - -null() -> null. - -fix_raw() -> - ?LET(Integer, choose(0, 31), - ?LET(Binary, binary(Integer), Binary)). - -raw16() -> - ?LET(Integer, uint16(), - ?LET(Binary, binary(Integer), Binary)). - -raw32() -> - ?LET(Binary, binary(65537), Binary). - -fix_array() -> - eqc_gen:resize(16, eqc_gen:list(oneof(primitive_types()))). - -array16() -> - eqc_gen:resize(128, eqc_gen:list(oneof(primitive_types()))). - --endif. --endif. diff --git a/rebar.config b/rebar.config index f6d12f9..8e5c229 100644 --- a/rebar.config +++ b/rebar.config @@ -4,7 +4,6 @@ {require_otp_vsn, "22|23|24|25"}. {erl_opts, [fail_on_warning, debug_info, warn_untyped_record]}. -%%, {parse_transform, eqc_cover}]}. {xref_checks, [undefined_function_calls]}. {cover_enabled, true}. @@ -15,3 +14,19 @@ {erl_first_files, [ "src/msgpack_ext.erl" ]}. + +{project_plugins, [rebar3_proper]}. + +{profiles, + [{test, [ + {erl_opts, [nowarn_export_all]}, + {deps, [proper]} + ] + }] +}. + +%% See: https://erlangforums.com/t/erlang-otp-26-0-released/2607/7 +{dialyzer, [ + {plt_extra_apps, [eunit]}, % or alternatively to add eunit to the analysis set without making it a runtime dep + {plt_apps, all_deps} % default: top_level_deps +]}. diff --git a/src/msgpack.erl b/src/msgpack.erl index 2830c66..920e83c 100644 --- a/src/msgpack.erl +++ b/src/msgpack.erl @@ -46,6 +46,7 @@ -include("msgpack.hrl"). -export_type([object/0, msgpack_map/0, options/0, ext_packer/0, ext_unpacker/0]). +-export_type([msgpack_map_jiffy/0, msgpack_map_jsx/0]). -type object() :: msgpack_term(). -type options() :: diff --git a/src/msgpack.hrl b/src/msgpack.hrl index d7afb2b..2d39702 100644 --- a/src/msgpack.hrl +++ b/src/msgpack.hrl @@ -28,6 +28,7 @@ -type msgpack_term() :: [msgpack_term()] | msgpack_map() | integer() | float() | boolean() | binary() | string() | {string, string()}. +%% jiffy, jsx would be soon deprecated as the map is now primitive type. -type format_type() :: jsx|jiffy|map. -define(DEFAULT_MAP_FORMAT, map). diff --git a/test/prop_msgpack.erl b/test/prop_msgpack.erl new file mode 100644 index 0000000..488e143 --- /dev/null +++ b/test/prop_msgpack.erl @@ -0,0 +1,184 @@ +%% Copyright (C) 2009-2023 UENISHI Kota +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. +%% + +-module(prop_msgpack). +-include_lib("proper/include/proper.hrl"). +-include("msgpack.hrl"). + + +%% -define(NUMTESTS, 16). +%% -define(QC_OUT(P), +%% eqc:on_output(fun(Str, Args) -> +%% io:format(user, Str, Args) end, P)). +%% -define(_assertProp(S), +%% {timeout, ?NUMTESTS * 10, +%% ?_assert(quickcheck(numtests(?NUMTESTS, ?QC_OUT(S))))}). + +%% eqc_test_() -> +%% {inparallel, +%% [ +%% ?_assertProp(prop_msgpack()), +%% ?_assertProp(prop_msgpack([{format, jiffy}])), +%% ?_assertProp(prop_msgpack([{format, jsx}])) +%% ]}. + +%%% Primitive Properties %%% +prop_uint() -> + ?FORALL( + {UnsignedInt, Opts}, + {oneof([positive_fixnum(), uint8(), uint16(), uint32(), uint64()]), + stable_opts()}, + pack_and_unpack(UnsignedInt, Opts)). + +prop_int() -> + ?FORALL( + {Int, Opts}, + {oneof([positive_fixnum(), negative_fixnum(), int8(), int16(), int32(), int64()]), + stable_opts()}, + pack_and_unpack(Int, Opts)). + +prop_binary() -> + ?FORALL( + {Binary, Opts}, + {oneof([fix_raw(), raw16(), raw32()]), stable_opts()}, + pack_and_unpack(Binary, Opts)). + +prop_float() -> + ?FORALL( + Float, + proper_types:float(), + pack_and_unpack(Float, [])). + +prop_primitive() -> + ?FORALL( + {PrimObj, Opts}, + {oneof(primitive_types()), stable_opts()}, + pack_and_unpack(PrimObj, Opts)). + +prop_array_primitive() -> + ?FORALL( + {Array, Opts}, + {oneof([fix_array_primitive(), array16_primitive()]), stable_opts()}, + pack_and_unpack(Array, Opts)). + +prop_map_primitive() -> + ?FORALL( + {Map, Opts}, + {oneof([fix_map_primitive(), map16_primitive()]), stable_opts()}, + pack_and_unpack(Map, Opts)). + +prop_msgpack() -> + ?FORALL({Obj, Opts}, + {msgpack_object(), stable_opts()}, + pack_and_unpack(Obj, Opts)). + +prop_string() -> + ?FORALL({Str, Opts}, + {utf8(), + oneof( + [ + [], + [{unpack_str, as_list},{pack_str, from_list},{validate_string,true}], + [{unpack_str, as_binary},{pack_str, from_binary},{validate_string,true}], + [{unpack_str, as_tagged_list},{pack_str, from_tagged_list},{validate_string,true}] + ])}, + pack_and_unpack(unicode:characters_to_list(Str), Opts)). + + +%%% Helpers %%% +pack_and_unpack(Obj, Opts) -> + Bin = msgpack:pack(Obj, Opts), + {ok, Obj} = msgpack:unpack(Bin, Opts), + is_binary(Bin). + + +%%% Generators %%% +stable_opts() -> + % TODO: build property tests on options + []. + +null() -> null. + +positive_fixnum() -> choose(0, 127). +negative_fixnum() -> choose(-32, -1). + +int8() -> choose(-16#80, 16#7F). +int16() -> oneof([choose(-16#8000, -16#81), + choose(16#80, 16#7FFF)]). +int32() -> oneof([choose(-16#80000000, -16#8001), + choose(16#10000, 16#7FFFFFFF)]). +int64() -> oneof([choose(-16#8000000000000000, -16#80000001), + choose(16#100000000, 16#7FFFFFFFFFFFFFFF)]). + +uint8() -> choose(0, 16#FF). +uint16() -> choose(16#100, 16#FFFF). +uint32() -> choose(16#10000, 16#FFFFFFFF). +uint64() -> choose(16#100000000, 16#FFFFFFFFFFFFFFFF). + +fix_raw() -> + ?LET(Integer, choose(0, 31), + ?LET(Binary, binary(Integer), Binary)). + +raw16() -> + ?LET(Integer, uint16(), + ?LET(Binary, binary(Integer), Binary)). + +raw32() -> + ?LET(Binary, binary(65537), Binary). + +primitive_types() -> + [ + null(), + positive_fixnum(), negative_fixnum(), + int8(), int16(), int32(), int64(), + uint8(), uint16(), uint32(), uint64(), + proper_types:float(), proper_types:bool(), + fix_raw(), raw16(), raw32() + ]. + + +container_types() -> + [ fix_array_primitive(), array16_primitive(), + fix_map_primitive(), map16_primitive() ]. + +fix_array_primitive() -> + %% up to 2^4-1 + %% TODO: check the first 4 bits be 1001 + resize(15, proper_types:list(oneof(primitive_types()))). + +array16_primitive() -> + %% Up to 2^16-1, but for performance + %% TODO: check the first byte be 0xdc (so s 0xdd for array32) + resize(128, proper_types:list(oneof(primitive_types()))). + +fix_map_primitive() -> + %% up to 2^4-1 + %% TODO: check the first 4 bits be 1000 + resize(15, + proper_types:map( + oneof(primitive_types()), + oneof(primitive_types()))). + +map16_primitive() -> + %% Up to 2^16-1, but for performance + %% TODO: check the first byte be 0xde (so s 0xdf for map32) + resize(128, + proper_types:map( + oneof(primitive_types()), + oneof(primitive_types()))). + +%% TODO: add map +msgpack_object() -> + oneof(container_types() ++ primitive_types()).
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor