56ZUOVSM6J5FLDA5VRM3R57IRJF5GMRKVXJOD2BF7WRH53E43A6AC endtest "Encode signed" doassert WaParser.LEB128.encode_signed(0) == <<0x00>>assert WaParser.LEB128.encode_signed(123_456) == <<0xC0, 0xC4, 0x07>>assert WaParser.LEB128.encode_signed(-123_456) == <<0xC0, 0xBB, 0x78>>endtest "Decode signed" doassert WaParser.LEB128.decode_signed(<<0x00>>) == 0assert WaParser.LEB128.decode_signed(<<0xC0, 0xC4, 0x07>>) == 123_456assert WaParser.LEB128.decode_signed(<<0xC0, 0xBB, 0x78>>) == -123_456
acc|> Enum.reverse()|> Enum.with_index(fn bits, index ->if index < size - 1 do<<1::1, bits::7>>
defp decode_unsigned(<<1::1, byte::7, rest::bytes>>, acc) dodecode_unsigned(rest, <<byte::7, acc::bitstring>>)enddef encode_signed(0) do<<0x00>>enddef encode_signed(int) doint |> to_bitstring |> seven_bits_encodingenddefp to_bitstring(int) doabs =if int < 0 doint * -1
defp encode_unsigned(int, acc) doseven_bits = Bitwise.band(int, 0x7F)int = Bitwise.bsr(int, 7)encode_unsigned(int, [seven_bits | acc])
defp seven_bits_encoding(<<sb::size(7), rest::bitstring>>, acc) dobyte =case acc do[] -> <<sb>>_ -> <<1::1, sb::7>>endseven_bits_encoding(rest, [byte | acc])
def decode_unsigned(bytes) do{result, _} =for <<(<<_sign::1, byte::7>> <- bytes)>>, reduce: {0, 0} do{result, m} ->result = Bitwise.bor(result, Bitwise.bsl(byte, 7 * m)){result, m + 1}endresult
defp decode_signed(<<1::1, byte::7, rest::bytes>>, acc) dodecode_signed(rest, <<byte::7, acc::bitstring>>)