diff --git a/benchmark/mix/tasks/protox/benchmark/generate/payloads.ex b/benchmark/mix/tasks/protox/benchmark/generate/payloads.ex index e3d423f4..42d20f4f 100644 --- a/benchmark/mix/tasks/protox/benchmark/generate/payloads.ex +++ b/benchmark/mix/tasks/protox/benchmark/generate/payloads.ex @@ -1,11 +1,13 @@ defmodule Mix.Tasks.Protox.Benchmark.Generate.Payloads do @moduledoc false - require Logger - use Mix.Task use PropCheck + alias ProtobufTestMessages.Proto3.TestAllTypesProto3 + + require Logger + @nb_samples 10 @impl Mix.Task @@ -31,7 +33,7 @@ defmodule Mix.Tasks.Protox.Benchmark.Generate.Payloads do match?(["Protox", "Benchmark", _, "Message"], Module.split(mod)) end) - modules = [ProtobufTestMessages.Proto3.TestAllTypesProto3 | modules] + modules = [TestAllTypesProto3 | modules] Logger.info("Modules: #{inspect(modules)}") @@ -51,8 +53,7 @@ defmodule Mix.Tasks.Protox.Benchmark.Generate.Payloads do payloads = payloads_async |> Task.async_stream(fn {name, gen} -> {name, gen.()} end, timeout: :infinity) - |> Stream.map(fn {:ok, {name, payloads}} -> {name, payloads} end) - |> Map.new() + |> Map.new(fn {:ok, {name, payloads}} -> {name, payloads} end) {:ok, payloads} end diff --git a/benchmark/mix/tasks/protox/benchmark/generate/protos.ex b/benchmark/mix/tasks/protox/benchmark/generate/protos.ex index f9f75e7e..1be3673a 100644 --- a/benchmark/mix/tasks/protox/benchmark/generate/protos.ex +++ b/benchmark/mix/tasks/protox/benchmark/generate/protos.ex @@ -1,10 +1,10 @@ defmodule Mix.Tasks.Protox.Benchmark.Generate.Protos do @moduledoc false - require Logger - use Mix.Task + require Logger + # Frequencies are taken from # https://github.com/protocolbuffers/protobuf/blob/336d6f04e94efebcefb5574d0c8d487bcb0d187e/benchmarks/gen_synthetic_protos.py. @field_freqs [ diff --git a/benchmark/mix/tasks/protox/benchmark/report.ex b/benchmark/mix/tasks/protox/benchmark/report.ex index eb78bac7..6b767618 100644 --- a/benchmark/mix/tasks/protox/benchmark/report.ex +++ b/benchmark/mix/tasks/protox/benchmark/report.ex @@ -3,6 +3,8 @@ defmodule Mix.Tasks.Protox.Benchmark.Report do use Mix.Task + alias Benchee.Formatters.{Console, HTML} + @impl Mix.Task @spec run(any) :: any def run(args) do @@ -11,8 +13,8 @@ defmodule Mix.Tasks.Protox.Benchmark.Report do Benchee.report( load: files, formatters: [ - {Benchee.Formatters.Console, extended_statistics: true}, - {Benchee.Formatters.HTML, file: "benchmark/output/html/report.html"} + {Console, extended_statistics: true}, + {HTML, file: "benchmark/output/html/report.html"} ] ) else diff --git a/benchmark/mix/tasks/protox/benchmark/run.ex b/benchmark/mix/tasks/protox/benchmark/run.ex index b31f699d..d1cdf402 100644 --- a/benchmark/mix/tasks/protox/benchmark/run.ex +++ b/benchmark/mix/tasks/protox/benchmark/run.ex @@ -3,6 +3,8 @@ defmodule Mix.Tasks.Protox.Benchmark.Run do use Mix.Task + alias Benchee.Formatters.Console + @options [ task: :string ] @@ -11,9 +13,9 @@ defmodule Mix.Tasks.Protox.Benchmark.Run do @spec run(any) :: any def run(args) do with {opts, argv, []} <- OptionParser.parse(args, strict: @options), - tasks <- get_tasks(opts), - {:ok, tag} <- get_tag(argv), - payloads <- get_payloads("./benchmark/benchmark_payloads.bin") do + tasks = get_tasks(opts), + {:ok, tag} <- get_tag(argv) do + payloads = get_payloads("./benchmark/benchmark_payloads.bin") run_benchee_tasks(tag, payloads, tasks) else err -> @@ -56,7 +58,7 @@ defmodule Mix.Tasks.Protox.Benchmark.Run do time: 5, memory_time: 2, reduction_time: 2, - formatters: [Benchee.Formatters.Console] + formatters: [Console] ) end diff --git a/conformance/mix/tasks/protox/task.ex b/conformance/mix/tasks/protox/task.ex index 35cfb39e..61949660 100644 --- a/conformance/mix/tasks/protox/task.ex +++ b/conformance/mix/tasks/protox/task.ex @@ -86,8 +86,7 @@ defmodule Mix.Tasks.Protox.Conformance do {"protobuf_BUILD_LIBPROTOC", "OFF"}, {"protobuf_BUILD_LIBUPB", "OFF"} ] - |> Enum.map(fn {key, value} -> "-D#{key}=#{value}" end) - |> Enum.join(" ") + |> Enum.map_join(" ", fn {key, value} -> "-D#{key}=#{value}" end) File.cd!(Mix.Project.deps_paths().protobuf, fn -> cmd = shell.cmd("cmake . #{configuration}") diff --git a/conformance/protox/conformance/escript.ex b/conformance/protox/conformance/escript.ex index 3f755cd9..9edea654 100644 --- a/conformance/protox/conformance/escript.ex +++ b/conformance/protox/conformance/escript.ex @@ -50,13 +50,8 @@ defmodule Protox.Conformance.Escript do end defp handle_request( - { - :ok, - request = %Conformance.ConformanceRequest{ - requested_output_format: :PROTOBUF, - payload: {:protobuf_payload, _} - } - }, + {:ok, + %Conformance.ConformanceRequest{requested_output_format: :PROTOBUF, payload: {:protobuf_payload, _}} = request}, log_file ) do IO.binwrite(log_file, "Will parse protobuf\n") diff --git a/lib/mix/tasks/protox/generate.ex b/lib/mix/tasks/protox/generate.ex index 12cfc37e..f92ee742 100644 --- a/lib/mix/tasks/protox/generate.ex +++ b/lib/mix/tasks/protox/generate.ex @@ -1,4 +1,6 @@ defmodule Mix.Tasks.Protox.Generate do + @shortdoc "Generate Elixir code from Protobuf definitions" + @moduledoc """ Generate Elixir code from `.proto` files. @@ -13,8 +15,6 @@ defmodule Mix.Tasks.Protox.Generate do If you have large protobuf files, you can use the `--multiple-files` option to generate one file per module (it will leverage parallel compilation). """ - @shortdoc "Generate Elixir code from Protobuf definitions" - use Mix.Task @options [ diff --git a/lib/protox/decode.ex b/lib/protox/decode.ex index d7f3cd98..9e8a7a30 100644 --- a/lib/protox/decode.ex +++ b/lib/protox/decode.ex @@ -1,14 +1,13 @@ defmodule Protox.Decode do @moduledoc false # Helpers decoding functions that will be used by the generated code. - - import Bitwise - use Protox.{ Float, WireTypes } + import Bitwise + alias Protox.{ Varint, Zigzag @@ -269,14 +268,12 @@ defmodule Protox.Decode do end def parse_delimited(bytes, len) do - try do - <> = bytes + <> = bytes - {value, rest} - rescue - _ -> - reraise Protox.DecodingError.new(bytes, "invalid bytes for delimited field"), - __STACKTRACE__ - end + {value, rest} + rescue + _ -> + reraise Protox.DecodingError.new(bytes, "invalid bytes for delimited field"), + __STACKTRACE__ end end diff --git a/lib/protox/define_decoder.ex b/lib/protox/define_decoder.ex index a7ca664a..eefad216 100644 --- a/lib/protox/define_decoder.ex +++ b/lib/protox/define_decoder.ex @@ -1,9 +1,9 @@ defmodule Protox.DefineDecoder do @moduledoc false # Internal. Generates the decoder of a message. + use Protox.{Float, WireTypes} alias Protox.{Field, OneOf, Scalar} - use Protox.{Float, WireTypes} def define(msg_name, fields, opts \\ []) do vars = %{ @@ -39,12 +39,10 @@ defmodule Protox.DefineDecoder do quote do @spec decode(binary()) :: {:ok, t()} | {:error, any()} def decode(bytes) do - try do - {:ok, decode!(bytes)} - rescue - e in [Protox.DecodingError, Protox.IllegalTagError, Protox.RequiredFieldsError] -> - {:error, e} - end + {:ok, decode!(bytes)} + rescue + e in [Protox.DecodingError, Protox.IllegalTagError, Protox.RequiredFieldsError] -> + {:error, e} end unquote(decode_bang_fun) @@ -267,12 +265,7 @@ defmodule Protox.DefineDecoder do end end - defp make_update_field( - value, - %Field{kind: %OneOf{}, type: {:message, _}} = field, - vars, - _wrap_value - ) do + defp make_update_field(value, %Field{kind: %OneOf{}, type: {:message, _}} = field, vars, _wrap_value) do case field.label do :proto3_optional -> quote do @@ -305,12 +298,7 @@ defmodule Protox.DefineDecoder do end end - defp make_update_field( - value, - %Field{kind: %Scalar{}, type: {:message, _}} = field, - vars, - _wrap_value - ) do + defp make_update_field(value, %Field{kind: %Scalar{}, type: {:message, _}} = field, vars, _wrap_value) do quote do { unquote(field.name), diff --git a/lib/protox/define_encoder.ex b/lib/protox/define_encoder.ex index 05c6d3d0..082fafd4 100644 --- a/lib/protox/define_encoder.ex +++ b/lib/protox/define_encoder.ex @@ -43,12 +43,10 @@ defmodule Protox.DefineEncoder do quote do @spec encode(t()) :: {:ok, iodata(), non_neg_integer()} | {:error, any()} def encode(msg) do - try do - msg |> encode!() |> Tuple.insert_at(0, :ok) - rescue - e in [Protox.EncodingError, Protox.RequiredFieldsError] -> - {:error, e} - end + msg |> encode!() |> Tuple.insert_at(0, :ok) + rescue + e in [Protox.EncodingError, Protox.RequiredFieldsError] -> + {:error, e} end @spec encode!(t()) :: {iodata(), non_neg_integer()} | no_return() @@ -124,13 +122,11 @@ defmodule Protox.DefineEncoder do quote do defp unquote(fun_name)({unquote(vars.acc), unquote(vars.acc_size)}, unquote(vars.msg)) do - try do - unquote(fun_ast) - rescue - ArgumentError -> - reraise Protox.EncodingError.new(unquote(name), "invalid field value"), - __STACKTRACE__ - end + unquote(fun_ast) + rescue + ArgumentError -> + reraise Protox.EncodingError.new(unquote(name), "invalid field value"), + __STACKTRACE__ end end end @@ -152,7 +148,7 @@ defmodule Protox.DefineEncoder do end case {syntax, required} do - {:proto2, _required = true} -> + {:proto2, true = _required} -> quote do case unquote(vars.msg).unquote(field.name) do nil -> raise Protox.RequiredFieldsError.new([unquote(field.name)]) @@ -160,7 +156,7 @@ defmodule Protox.DefineEncoder do end end - {:proto2, _required = false} -> + {:proto2, false = _required} -> quote do case unquote(var) do nil -> {unquote(vars.acc), unquote(vars.acc_size)} @@ -180,12 +176,7 @@ defmodule Protox.DefineEncoder do end end - defp make_encode_field_body( - %Field{label: :proto3_optional, kind: %OneOf{}} = field, - _required, - _syntax, - vars - ) do + defp make_encode_field_body(%Field{label: :proto3_optional, kind: %OneOf{}} = field, _required, _syntax, vars) do {key, key_size} = Protox.Encode.make_key_bytes(field.tag, field.type) var = Macro.var(:child_field_value, __MODULE__) encode_value_ast = get_encode_value_body(field.type, var) @@ -206,12 +197,7 @@ defmodule Protox.DefineEncoder do end end - defp make_encode_field_body( - %Field{kind: %OneOf{}} = field, - _required, - _syntax, - vars - ) do + defp make_encode_field_body(%Field{kind: %OneOf{}} = field, _required, _syntax, vars) do {key, key_size} = Protox.Encode.make_key_bytes(field.tag, field.type) encode_value_ast = get_encode_value_body(field.type, vars.child_field_value) diff --git a/lib/protox/define_message.ex b/lib/protox/define_message.ex index 3bc47159..c24c4c18 100644 --- a/lib/protox/define_message.ex +++ b/lib/protox/define_message.ex @@ -4,7 +4,7 @@ defmodule Protox.DefineMessage do alias Protox.{Field, OneOf, Scalar} def define(messages_schemas, opts \\ []) do - for {_msg_name, msg_schema = %Protox.MessageSchema{}} <- messages_schemas do + for {_msg_name, %Protox.MessageSchema{} = msg_schema} <- messages_schemas do # Revert the order of the fields so we iterate from last field to first. # This enables us to construct the output iodata using [ field | acc ] sorted_fields = msg_schema.fields |> Map.values() |> Enum.sort(&(&1.tag >= &2.tag)) @@ -56,7 +56,7 @@ defmodule Protox.DefineMessage do def unknown_fields(msg), do: msg.unquote(unknown_fields) @spec unknown_fields_name() :: unquote(unknown_fields) - def unknown_fields_name(), do: unquote(unknown_fields) + def unknown_fields_name, do: unquote(unknown_fields) @spec clear_unknown_fields(struct) :: struct def clear_unknown_fields(msg), do: struct!(msg, [{unquote(unknown_fields), []}]) @@ -98,7 +98,7 @@ defmodule Protox.DefineMessage do # Append a '_' while there's a collision base_name |> Atom.to_string() - |> (fn x -> x <> "_" end).() + |> then(fn x -> x <> "_" end) |> String.to_atom() |> make_unknown_fields_name(fields) else @@ -128,7 +128,7 @@ defmodule Protox.DefineMessage do Protox.Defs.split_oneofs(fields) fields_types = - for field = %Field{} <- fields do + for %Field{} = field <- fields do case {field.kind, field.type} do {:map, type} -> key_type = type |> elem(0) |> proto_type_to_typespec() @@ -143,7 +143,7 @@ defmodule Protox.DefineMessage do value_type = proto_type_to_typespec(type) quote(do: {unquote(field.name), unquote(value_type) | nil}) - {%Scalar{}, type = {:message, _}} -> + {%Scalar{}, {:message, _} = type} -> value_type = proto_type_to_typespec(type) quote(do: {unquote(field.name), unquote(value_type) | nil}) @@ -167,7 +167,7 @@ defmodule Protox.DefineMessage do end proto3_optionals_types = - for field = %Field{} <- proto3_optionals do + for %Field{} = field <- proto3_optionals do quote do {unquote(field.name), unquote(proto_type_to_typespec(field.type)) | nil} end diff --git a/lib/protox/encode.ex b/lib/protox/encode.ex index f92493ca..d3490b8b 100644 --- a/lib/protox/encode.ex +++ b/lib/protox/encode.ex @@ -3,14 +3,14 @@ defmodule Protox.Encode do This module contains the functions necessary to encode protobuf messages. """ - import Protox.Guards - import Bitwise - use Protox.{ Float, WireTypes } + import Bitwise + import Protox.Guards + alias Protox.{ Varint, Zigzag diff --git a/lib/protox/merge_message.ex b/lib/protox/merge_message.ex index fd184247..26b44f4c 100644 --- a/lib/protox/merge_message.ex +++ b/lib/protox/merge_message.ex @@ -77,11 +77,7 @@ defmodule Protox.MergeMessage do defp merge_scalar(:proto3, v1, v2, v2), do: v1 defp merge_scalar(_syntax, _v1, v2, _default), do: v2 - defp merge_oneof( - msg, - {v1_child_field, v1_child_value}, - {v2_child_field, v2_child_value} = v2 - ) + defp merge_oneof(msg, {v1_child_field, v1_child_value}, {v2_child_field, v2_child_value} = v2) when v1_child_field == v2_child_field do v1_child_field_def = Map.fetch!(msg.__struct__.schema().fields, v1_child_field) v2_child_field_def = Map.fetch!(msg.__struct__.schema().fields, v2_child_field) diff --git a/lib/protox/parse.ex b/lib/protox/parse.ex index 406944b4..f84884da 100644 --- a/lib/protox/parse.ex +++ b/lib/protox/parse.ex @@ -66,7 +66,7 @@ defmodule Protox.Parse do namespace_or_nil = Keyword.get(opts, :namespace, nil) processed_messages = - for {msg_name, msg = %MessageSchema{}} <- definition.messages_schemas, into: %{} do + for {msg_name, %MessageSchema{} = msg} <- definition.messages_schemas, into: %{} do name = Module.concat([namespace_or_nil | msg_name]) fields = @@ -197,10 +197,7 @@ defmodule Protox.Parse do end end - defp resolve_types( - %Field{kind: :map, type: {key_type, {:type_to_resolve, tname}}} = field, - enums - ) do + defp resolve_types(%Field{kind: :map, type: {key_type, {:type_to_resolve, tname}}} = field, enums) do if Map.has_key?(enums, tname) do %Field{field | type: {key_type, {:enum, tname}}} else @@ -211,11 +208,7 @@ defmodule Protox.Parse do defp resolve_types(%Field{} = field, _enums), do: field defp set_default_value( - %Field{ - kind: %Scalar{default_value: :enum_default_to_resolve}, - type: {:enum, ename} - } = - field, + %Field{kind: %Scalar{default_value: :enum_default_to_resolve}, type: {:enum, ename}} = field, enums ) do # proto2: the first entry is always the default value @@ -236,10 +229,7 @@ defmodule Protox.Parse do %Field{field | type: {:message, Module.concat([namespace_or_nil | mname])}} end - defp concat_names( - %Field{kind: :map, type: {key_type, {:message, mname}}} = field, - namespace_or_nil - ) do + defp concat_names(%Field{kind: :map, type: {key_type, {:message, mname}}} = field, namespace_or_nil) do %Field{field | type: {key_type, {:message, Module.concat([namespace_or_nil | mname])}}} end @@ -345,11 +335,7 @@ defmodule Protox.Parse do defp map_entry(nil, _prefix, _descriptor), do: nil - defp map_entry( - upper, - prefix, - %FieldDescriptorProto{label: :repeated, type: :message} = descriptor - ) do + defp map_entry(upper, prefix, %FieldDescriptorProto{label: :repeated, type: :message} = descriptor) do # Might be a map. Now find a nested type of upper that is the corresponding entry. search_nested_type = Enum.find(upper.nested_type, fn m -> @@ -394,17 +380,11 @@ defmodule Protox.Parse do %OneOf{parent: String.to_atom(Enum.at(upper.oneof_decl, index).name)} end - defp get_kind(_syntax, _upper, %FieldDescriptorProto{ - label: :repeated, - options: %FieldOptions{packed: true} - }) do + defp get_kind(_syntax, _upper, %FieldDescriptorProto{label: :repeated, options: %FieldOptions{packed: true}}) do :packed end - defp get_kind(_syntax, _upper, %FieldDescriptorProto{ - label: :repeated, - options: %FieldOptions{packed: false} - }) do + defp get_kind(_syntax, _upper, %FieldDescriptorProto{label: :repeated, options: %FieldOptions{packed: false}}) do :unpacked end @@ -412,8 +392,7 @@ defmodule Protox.Parse do :packed end - defp get_kind(:proto3, _upper, %FieldDescriptorProto{label: :repeated, type: ty}) - when is_primitive(ty) do + defp get_kind(:proto3, _upper, %FieldDescriptorProto{label: :repeated, type: ty}) when is_primitive(ty) do :packed end diff --git a/lib/protox/varint.ex b/lib/protox/varint.ex index 37b74699..10f1e581 100644 --- a/lib/protox/varint.ex +++ b/lib/protox/varint.ex @@ -5,17 +5,13 @@ defmodule Protox.Varint do import Bitwise @spec encode(integer) :: {binary(), non_neg_integer()} - def encode(v) when v < 1 <<< 7, - do: {<>, 1} + def encode(v) when v < 1 <<< 7, do: {<>, 1} - def encode(v) when v < 1 <<< 14, - do: {<<1::1, v::7, v >>> 7>>, 2} + def encode(v) when v < 1 <<< 14, do: {<<1::1, v::7, v >>> 7>>, 2} - def encode(v) when v < 1 <<< 21, - do: {<<1::1, v::7, 1::1, v >>> 7::7, v >>> 14>>, 3} + def encode(v) when v < 1 <<< 21, do: {<<1::1, v::7, 1::1, v >>> 7::7, v >>> 14>>, 3} - def encode(v) when v < 1 <<< 28, - do: {<<1::1, v::7, 1::1, v >>> 7::7, 1::1, v >>> 14::7, v >>> 21>>, 4} + def encode(v) when v < 1 <<< 28, do: {<<1::1, v::7, 1::1, v >>> 7::7, 1::1, v >>> 14::7, v >>> 21>>, 4} def encode(v) when v < 1 <<< 35, do: {<<1::1, v::7, 1::1, v >>> 7::7, 1::1, v >>> 14::7, 1::1, v >>> 21::7, v >>> 28>>, 5} @@ -39,11 +35,9 @@ defmodule Protox.Varint do end @spec decode(binary) :: {non_neg_integer, binary} - def decode(<<0::1, byte0::7, rest::binary>>), - do: {byte0, rest} + def decode(<<0::1, byte0::7, rest::binary>>), do: {byte0, rest} - def decode(<<1::1, byte1::7, 0::1, byte0::7, rest::binary>>), - do: {byte1 <<< 0 ||| byte0 <<< 7, rest} + def decode(<<1::1, byte1::7, 0::1, byte0::7, rest::binary>>), do: {byte1 <<< 0 ||| byte0 <<< 7, rest} def decode(<<1::1, byte2::7, 1::1, byte1::7, 0::1, byte0::7, rest::binary>>), do: {byte2 <<< 0 ||| byte1 <<< 7 ||| byte0 <<< 14, rest} @@ -57,17 +51,14 @@ defmodule Protox.Varint do def decode( <<1::1, byte5::7, 1::1, byte4::7, 1::1, byte3::7, 1::1, byte2::7, 1::1, byte1::7, 0::1, byte0::7, rest::binary>> ), - do: - {byte5 <<< 0 ||| byte4 <<< 7 ||| byte3 <<< 14 ||| byte2 <<< 21 ||| byte1 <<< 28 ||| - byte0 <<< 35, rest} + do: {byte5 <<< 0 ||| byte4 <<< 7 ||| byte3 <<< 14 ||| byte2 <<< 21 ||| byte1 <<< 28 ||| byte0 <<< 35, rest} def decode( <<1::1, byte6::7, 1::1, byte5::7, 1::1, byte4::7, 1::1, byte3::7, 1::1, byte2::7, 1::1, byte1::7, 0::1, byte0::7, rest::binary>> ), do: - {byte6 <<< 0 ||| byte5 <<< 7 ||| byte4 <<< 14 ||| byte3 <<< 21 ||| byte2 <<< 28 ||| - byte1 <<< 35 ||| + {byte6 <<< 0 ||| byte5 <<< 7 ||| byte4 <<< 14 ||| byte3 <<< 21 ||| byte2 <<< 28 ||| byte1 <<< 35 ||| byte0 <<< 42, rest} def decode( @@ -75,10 +66,8 @@ defmodule Protox.Varint do byte1::7, 0::1, byte0::7, rest::binary>> ), do: - {byte7 <<< 0 ||| byte6 <<< 7 ||| byte5 <<< 14 ||| byte4 <<< 21 ||| byte3 <<< 28 ||| - byte2 <<< 35 ||| - byte1 <<< 42 ||| - byte0 <<< 49, rest} + {byte7 <<< 0 ||| byte6 <<< 7 ||| byte5 <<< 14 ||| byte4 <<< 21 ||| byte3 <<< 28 ||| byte2 <<< 35 ||| + byte1 <<< 42 ||| byte0 <<< 49, rest} def decode(b), do: do_decode(0, 0, b) diff --git a/test/protox/default_test.exs b/test/protox/default_test.exs index 445f1552..e3639c63 100644 --- a/test/protox/default_test.exs +++ b/test/protox/default_test.exs @@ -1,6 +1,5 @@ defmodule Protox.DefaultTest do use ExUnit.Case - doctest Protox.Default alias ProtobufTestMessages.{ Proto2.TestAllTypesProto2, @@ -8,6 +7,8 @@ defmodule Protox.DefaultTest do Proto3.TestAllTypesProto3 } + doctest Protox.Default + test "Protobuf3" do assert TestAllTypesProto3.default(:optional_nested_enum) == {:ok, :FOO} assert TestAllTypesProto3.default(:map_int32_int32) == {:error, :no_default_value} diff --git a/test/protox/guards_test.exs b/test/protox/guards_test.exs index 95e7c1f1..dae39da3 100644 --- a/test/protox/guards_test.exs +++ b/test/protox/guards_test.exs @@ -1,5 +1,6 @@ defmodule Protox.GuardsTest do use ExUnit.Case + import Protox.Guards test "is_primitive" do diff --git a/test/protox/merge_message_test.exs b/test/protox/merge_message_test.exs index 39f72ac6..a9a527b0 100644 --- a/test/protox/merge_message_test.exs +++ b/test/protox/merge_message_test.exs @@ -1,10 +1,10 @@ defmodule Protox.MergeMessageTest do use ExUnit.Case - doctest Protox.MergeMessage - alias ProtobufTestMessages.Proto3.{TestAllTypesProto3, TestAllTypesProto3.NestedMessage} + doctest Protox.MergeMessage + test "Protobuf 2, replace only set scalar fields" do r1 = %Protobuf2Message{a: 0, b: :ONE} r2 = %Protobuf2Message{a: nil, b: :TWO} diff --git a/test/protox/varint_test.exs b/test/protox/varint_test.exs index c4749fac..cf293e88 100644 --- a/test/protox/varint_test.exs +++ b/test/protox/varint_test.exs @@ -1,8 +1,9 @@ defmodule Protox.VarintTest do - import Bitwise use ExUnit.Case, async: true use ExUnitProperties + import Bitwise + property "Unrolled encoding produces the same result as the reference implementation" do check all(int <- integer(0..(1 <<< 64))) do {unrolled, size} = Protox.Varint.encode(int) diff --git a/test/support/random_init.ex b/test/support/random_init.ex index f775c23a..9e614ebf 100644 --- a/test/support/random_init.ex +++ b/test/support/random_init.ex @@ -143,7 +143,7 @@ defmodule Protox.RandomInit do defp do_generate(acc, [%Field{kind: %OneOf{parent: oneof_name}} | _] = fields, depth) do {oneof_list, fields} = - Enum.split_with(fields, fn field = %Field{} -> + Enum.split_with(fields, fn %Field{} = field -> case field.kind do %OneOf{parent: ^oneof_name} -> true _ -> false @@ -161,7 +161,7 @@ defmodule Protox.RandomInit do defp do_generate_oneof(acc, oneof_name, oneof_list, depth) do generators = - Enum.map(oneof_list, fn field = %Field{kind: %OneOf{parent: _}} -> + Enum.map(oneof_list, fn %Field{kind: %OneOf{parent: _}} = field -> {field.name, get_gen(depth, %Scalar{default_value: :dummy}, field.type)} end) @@ -169,7 +169,7 @@ defmodule Protox.RandomInit do end defp get_gen(_depth, %Scalar{}, {:enum, e}) do - oneof(e.constants() |> Map.new() |> Map.values()) + e.constants() |> Map.new() |> Map.values() |> oneof() end defp get_gen(_depth, %Scalar{}, :bool), do: bool() @@ -231,7 +231,7 @@ defmodule Protox.RandomInit do defp get_gen(_depth, :unpacked, :double), do: list(gen_double()) defp get_gen(_depth, kind, {:enum, e}) when kind == :packed or kind == :unpacked do - list(oneof(e.constants() |> Map.new() |> Map.values())) + list(e.constants() |> Map.new() |> Map.values() |> oneof()) end defp get_gen(_depth, :unpacked, :string), do: list(utf8())