Skip to content

Commit 2c43203

Browse files
committed
Added float parsing.
1 parent b356292 commit 2c43203

File tree

2 files changed

+35
-4
lines changed

2 files changed

+35
-4
lines changed

lib/osc/message.ex

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,13 @@ defmodule OSC.Message do
6767
do_construct_arguments tail, remaining_args, [value | result]
6868
end
6969

70-
defp get_next_value(?i, <<value :: [signed, big, size(32)], rest ::binary>>) do
70+
defp get_next_value(?i, <<value :: [signed, big, size(32)], rest :: binary>>) do
7171
{{:osc_integer, value}, rest}
7272
end
7373

74+
defp get_next_value(?f, <<value :: [float, size(32)], rest :: binary>>) do
75+
{{:osc_float, value}, rest}
76+
end
77+
7478
end
7579

test/osc/message_test.exs

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,47 @@
11
defmodule OSC.MessageTest do
22
use ExUnit.Case
33

4-
test "parses a simple osc message" do
4+
test "parses a simple integer osc message" do
55
msg = <<"/ab", 0, ",", 0, 0, 0>>
66
assert {"/ab", []} = OSC.Message.parse(msg)
77

88
msg = <<"/ab", 0, ",i", 0, 0, 1000 :: [signed, big, size(32)]>>
99
assert {"/ab", [{:osc_integer, 1000}]} = OSC.Message.parse(msg)
10-
10+
1111
msg = <<"/ab", 0, ",ii", 0, 1000 :: [signed, big, size(32)], 16 :: [signed, big, size(32)]>>
1212
assert {"/ab", [{:osc_integer, 1000}, {:osc_integer, 16}]} = OSC.Message.parse(msg)
1313

14-
msg = <<"/ab", 0, ",iii", 0, 0, 0, 0, 1000 :: [signed, big, size(32)],
14+
msg = <<"/ab", 0, ",iii", 0, 0, 0, 0, 1000 :: [signed, big, size(32)],
1515
16 :: [signed, big, size(32)], 17 :: [signed, big, size(32)] >>
1616
assert {"/ab", [{:osc_integer, 1000}, {:osc_integer, 16}, {:osc_integer, 17}]} = OSC.Message.parse(msg)
1717
end
1818

19+
test "parses a simple float osc message" do
20+
msg = <<"/ab", 0, ",f", 0, 0, 0x43, 0xdc, 0, 0>>
21+
assert {"/ab", [{:osc_float, 440.0}]} = OSC.Message.parse(msg)
22+
23+
msg = <<"/ab", 0, ",f", 0, 0, 0x40, 0xb5, 0xb2, 0x2d>>
24+
{path, [{key, value}]} = OSC.Message.parse(msg)
25+
assert "/ab" = path
26+
assert :osc_float = key
27+
assert_in_delta 5.678, value, 0.001
28+
29+
msg = <<"/ab", 0, ",f", 0, 0, 0x3f, 0x9d, 0xf3, 0xb6>>
30+
{path, [{key, value}]} = OSC.Message.parse(msg)
31+
assert "/ab" = path
32+
assert :osc_float = key
33+
assert_in_delta 1.234, value, 0.001
34+
end
35+
36+
test "parses combined message" do
37+
msg = <<"/ab", 0, ",if", 0, 1000 :: [signed, big, size(32)], 0x43dc0000 :: size(32)>>
38+
{path, [{int_key, int_value}, {float_key, float_value}]} = OSC.Message.parse(msg)
39+
assert "/ab" = path
40+
assert :osc_integer = int_key
41+
assert 1000 = int_value
42+
assert :osc_float = float_key
43+
assert_in_delta 440.0, float_value, 0.001
44+
end
45+
1946
end
2047

0 commit comments

Comments
 (0)