aboutsummaryrefslogtreecommitdiffstats
path: root/lib/erl_interface/test
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2019-06-11 20:18:39 +0200
committerSverker Eriksson <[email protected]>2019-06-11 20:49:16 +0200
commit269d1273b3ad459cec69bde197c16fe931a2d9d2 (patch)
treeff5b26e30adbde77f9107368b9de8e9529757802 /lib/erl_interface/test
parent3c62fb76b0ac56f3cf8d3f8abac20cd34b02e985 (diff)
downloadotp-269d1273b3ad459cec69bde197c16fe931a2d9d2.tar.gz
otp-269d1273b3ad459cec69bde197c16fe931a2d9d2.tar.bz2
otp-269d1273b3ad459cec69bde197c16fe931a2d9d2.zip
erl_interface: Fix bugs in ei_print_term for binary/bitstring
Diffstat (limited to 'lib/erl_interface/test')
-rw-r--r--lib/erl_interface/test/ei_print_SUITE.erl45
-rw-r--r--lib/erl_interface/test/ei_print_SUITE_data/ei_print_test.c61
2 files changed, 104 insertions, 2 deletions
diff --git a/lib/erl_interface/test/ei_print_SUITE.erl b/lib/erl_interface/test/ei_print_SUITE.erl
index f2a2548183..8a35b22ae5 100644
--- a/lib/erl_interface/test/ei_print_SUITE.erl
+++ b/lib/erl_interface/test/ei_print_SUITE.erl
@@ -27,7 +27,7 @@
-export([all/0, suite/0,
init_per_testcase/2,
atoms/1, tuples/1, lists/1, strings/1,
- maps/1, funs/1]).
+ maps/1, funs/1, binaries/1, bitstrings/1]).
-import(runner, [get_term/1]).
@@ -38,7 +38,7 @@ suite() ->
[{ct_hooks,[ts_install_cth]}].
all() ->
- [atoms, tuples, lists, strings, maps, funs].
+ [atoms, tuples, lists, strings, maps, funs, binaries, bitstrings].
init_per_testcase(Case, Config) ->
runner:init_per_testcase(?MODULE, Case, Config).
@@ -163,3 +163,44 @@ funs(Config) ->
runner:recv_eot(P),
ok.
+
+binaries(Config) ->
+ P = runner:start(Config, ?binaries),
+
+ "#Bin<>" = send_term_get_printed(P, <<>>),
+ "#Bin<1,2,3>" = send_term_get_printed(P, <<1,2,3>>),
+ "#Bin<0,127,128,255>" = send_term_get_printed(P, <<0,127,128,255>>),
+ Bin30 = <<1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30>>,
+ "#Bin<1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30>"
+ = send_term_get_printed(P, Bin30),
+ "#Bin<1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,...>"
+ = send_term_get_printed(P, <<Bin30/binary,31>>),
+
+ runner:recv_eot(P),
+ ok.
+
+bitstrings(Config) ->
+ P = runner:start(Config, ?bitstrings),
+
+ "#Bits<1:1>" = send_term_get_printed(P, <<1:1>>),
+ "#Bits<123:7>" = send_term_get_printed(P, <<123:7>>),
+ "#Bits<1,2,3:4>" = send_term_get_printed(P, <<1,2,3:4>>),
+ "#Bits<0,127,128,255,126:7>" = send_term_get_printed(P, <<0,127,128,255,-2:7>>),
+ Bits30 = <<1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
+ 20,21,22,23,24,25,26,27,28,29,30:5>>,
+ "#Bits<1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30:5>"
+ = send_term_get_printed(P, Bits30),
+ "#Bin<1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,241>"
+ = send_term_get_printed(P, <<Bits30/bits,1:3>>),
+ "#Bits<1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,240,...>"
+ = send_term_get_printed(P, <<Bits30/bits,1:4>>),
+
+ runner:recv_eot(P),
+ ok.
+
+
+
+send_term_get_printed(Port, Term) ->
+ Port ! {self(), {command, term_to_binary(Term)}},
+ {term, String} = get_term(Port),
+ String.
diff --git a/lib/erl_interface/test/ei_print_SUITE_data/ei_print_test.c b/lib/erl_interface/test/ei_print_SUITE_data/ei_print_test.c
index 0e2b24e45a..27d4153250 100644
--- a/lib/erl_interface/test/ei_print_SUITE_data/ei_print_test.c
+++ b/lib/erl_interface/test/ei_print_SUITE_data/ei_print_test.c
@@ -288,3 +288,64 @@ TESTCASE(funs)
report(1);
}
+
+
+TESTCASE(binaries)
+{
+ char *buf;
+ long len;
+ int err, n, index;
+ ei_x_buff x;
+
+ ei_init();
+
+ for (n = 5; n; n--) {
+ buf = read_packet(NULL);
+
+ index = 0;
+ err = ei_decode_version(buf, &index, NULL);
+ if (err != 0)
+ fail1("ei_decode_version returned %d", err);
+ err = ei_decode_binary(buf, &index, NULL, &len);
+ if (err != 0)
+ fail1("ei_decode_binary returned %d", err);
+
+ ei_x_new(&x);
+ ei_x_append_buf(&x, buf, index);
+ send_printed_buf(&x);
+ ei_x_free(&x);
+
+ free_packet(buf);
+ }
+ report(1);
+}
+
+TESTCASE(bitstrings)
+{
+ char *buf;
+ long len;
+ int err, n, index;
+ ei_x_buff x;
+
+ ei_init();
+
+ for (n = 7; n; n--) {
+ buf = read_packet(NULL);
+
+ index = 0;
+ err = ei_decode_version(buf, &index, NULL);
+ if (err != 0)
+ fail1("ei_decode_version returned %d", err);
+ err = ei_decode_bitstring(buf, &index, NULL, NULL, NULL);
+ if (err != 0)
+ fail1("ei_decode_bitstring returned %d", err);
+
+ ei_x_new(&x);
+ ei_x_append_buf(&x, buf, index);
+ send_printed_buf(&x);
+ ei_x_free(&x);
+
+ free_packet(buf);
+ }
+ report(1);
+}