emqx_utils_binary_tests.erl 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. %%--------------------------------------------------------------------
  2. %% Original file taken from https://github.com/arcusfelis/binary2
  3. %% Copyright (c) 2016 Michael Uvarov
  4. %% Copyright (c) 2023 EMQ Technologies Co., Ltd. All Rights Reserved.
  5. %%
  6. -module(emqx_utils_binary_tests).
  7. -import(emqx_utils_binary, [
  8. trim/1,
  9. ltrim/1,
  10. rtrim/1,
  11. trim/2,
  12. ltrim/2,
  13. rtrim/2,
  14. reverse/1,
  15. inverse/1,
  16. join/2,
  17. suffix/2,
  18. prefix/2,
  19. duplicate/2,
  20. union/2,
  21. intersection/2,
  22. subtract/2,
  23. optimize_patterns/1
  24. ]).
  25. -include_lib("eunit/include/eunit.hrl").
  26. trim1_test_() ->
  27. [
  28. ?_assertEqual(trim(<<>>), <<>>),
  29. ?_assertEqual(trim(<<0, 0, 0>>), <<>>),
  30. ?_assertEqual(trim(<<1, 2, 3>>), <<1, 2, 3>>),
  31. ?_assertEqual(trim(<<0, 1, 2>>), <<1, 2>>),
  32. ?_assertEqual(trim(<<0, 0, 1, 2>>), <<1, 2>>),
  33. ?_assertEqual(trim(<<1, 2, 0, 0>>), <<1, 2>>),
  34. ?_assertEqual(trim(<<0, 1, 2, 0>>), <<1, 2>>),
  35. ?_assertEqual(trim(<<0, 0, 0, 1, 2, 0, 0, 0>>), <<1, 2>>)
  36. ].
  37. ltrim1_test_() ->
  38. [
  39. ?_assertEqual(ltrim(<<>>), <<>>),
  40. ?_assertEqual(ltrim(<<0, 0, 0>>), <<>>),
  41. ?_assertEqual(ltrim(<<1, 2, 3>>), <<1, 2, 3>>),
  42. ?_assertEqual(ltrim(<<0, 1, 2>>), <<1, 2>>),
  43. ?_assertEqual(ltrim(<<0, 0, 1, 2>>), <<1, 2>>),
  44. ?_assertEqual(ltrim(<<1, 2, 0, 0>>), <<1, 2, 0, 0>>),
  45. ?_assertEqual(ltrim(<<0, 1, 2, 0>>), <<1, 2, 0>>),
  46. ?_assertEqual(ltrim(<<0, 0, 0, 1, 2, 0, 0, 0>>), <<1, 2, 0, 0, 0>>)
  47. ].
  48. rtrim1_test_() ->
  49. [
  50. ?_assertEqual(rtrim(<<>>), <<>>),
  51. ?_assertEqual(rtrim(<<1, 2, 3>>), <<1, 2, 3>>),
  52. ?_assertEqual(rtrim(<<0, 0, 0>>), <<>>),
  53. ?_assertEqual(rtrim(<<0, 1, 2>>), <<0, 1, 2>>),
  54. ?_assertEqual(rtrim(<<0, 0, 1, 2>>), <<0, 0, 1, 2>>),
  55. ?_assertEqual(rtrim(<<1, 2, 0, 0>>), <<1, 2>>),
  56. ?_assertEqual(rtrim(<<0, 1, 2, 0>>), <<0, 1, 2>>),
  57. ?_assertEqual(rtrim(<<0, 0, 0, 1, 2, 0, 0, 0>>), <<0, 0, 0, 1, 2>>)
  58. ].
  59. trim2_test_() ->
  60. [
  61. ?_assertEqual(trim(<<5>>, 5), <<>>),
  62. ?_assertEqual(trim(<<5, 1, 2, 5>>, 5), <<1, 2>>),
  63. ?_assertEqual(trim(<<5, 5, 5, 1, 2, 0, 0, 0>>, 5), <<1, 2, 0, 0, 0>>)
  64. ].
  65. ltrim2_test_() ->
  66. [
  67. ?_assertEqual(ltrim(<<5>>, 5), <<>>),
  68. ?_assertEqual(ltrim(<<5, 1, 2, 5>>, 5), <<1, 2, 5>>),
  69. ?_assertEqual(ltrim(<<5, 5, 5, 1, 2, 0, 0, 0>>, 5), <<1, 2, 0, 0, 0>>)
  70. ].
  71. rtrim2_test_() ->
  72. [
  73. ?_assertEqual(rtrim(<<5>>, 5), <<>>),
  74. ?_assertEqual(rtrim(<<5, 1, 2, 5>>, 5), <<5, 1, 2>>),
  75. ?_assertEqual(rtrim(<<5, 5, 5, 1, 2, 0, 0, 0>>, 5), <<5, 5, 5, 1, 2, 0, 0, 0>>)
  76. ].
  77. mtrim2_test_() ->
  78. [
  79. ?_assertEqual(trim(<<5>>, [1, 5]), <<>>),
  80. ?_assertEqual(trim(<<5, 1, 2, 5>>, [1, 5]), <<2>>),
  81. ?_assertEqual(trim(<<5, 1, 2, 5>>, [1, 2, 5]), <<>>),
  82. ?_assertEqual(trim(<<5, 5, 5, 1, 2, 0, 0, 0>>, [1, 5]), <<2, 0, 0, 0>>)
  83. ].
  84. mltrim2_test_() ->
  85. [
  86. ?_assertEqual(ltrim(<<5>>, [1, 5]), <<>>),
  87. ?_assertEqual(ltrim(<<5, 1, 2, 5>>, [1, 5]), <<2, 5>>),
  88. ?_assertEqual(ltrim(<<5, 1, 2, 5>>, [2, 5]), <<1, 2, 5>>),
  89. ?_assertEqual(ltrim(<<5, 5, 5, 1, 2, 0, 0, 0>>, [1, 5]), <<2, 0, 0, 0>>)
  90. ].
  91. mrtrim2_test_() ->
  92. [
  93. ?_assertEqual(rtrim(<<5>>, [1, 5]), <<>>),
  94. ?_assertEqual(rtrim(<<5, 1, 2, 5>>, [1, 5]), <<5, 1, 2>>),
  95. ?_assertEqual(rtrim(<<5, 1, 2, 5>>, [2, 5]), <<5, 1>>),
  96. ?_assertEqual(rtrim(<<5, 5, 5, 1, 2, 0, 0, 0>>, [1, 5]), <<5, 5, 5, 1, 2, 0, 0, 0>>),
  97. ?_assertEqual(rtrim(<<5, 5, 5, 1, 2, 0, 0, 0>>, [0, 5]), <<5, 5, 5, 1, 2>>)
  98. ].
  99. reverse_test_() ->
  100. [?_assertEqual(reverse(<<0, 1, 2>>), <<2, 1, 0>>)].
  101. join_test_() ->
  102. [
  103. ?_assertEqual(join([<<1, 2>>, <<3, 4>>, <<5, 6>>], <<0>>), <<1, 2, 0, 3, 4, 0, 5, 6>>),
  104. ?_assertEqual(
  105. join([<<"abc">>, <<"def">>, <<"xyz">>], <<"|">>),
  106. <<"abc|def|xyz">>
  107. ),
  108. ?_assertEqual(
  109. join([<<>>, <<"|">>, <<"x|z">>], <<"|">>),
  110. <<"|||x|z">>
  111. ),
  112. ?_assertEqual(
  113. join([<<"abc">>, <<"def">>, <<"xyz">>], <<>>),
  114. <<"abcdefxyz">>
  115. ),
  116. ?_assertEqual(join([], <<"|">>), <<>>)
  117. ].
  118. duplicate_test_() ->
  119. [
  120. ?_assertEqual(duplicate(5, <<1, 2>>), <<1, 2, 1, 2, 1, 2, 1, 2, 1, 2>>),
  121. ?_assertEqual(duplicate(50, <<0>>), <<0:400>>)
  122. ].
  123. suffix_test_() ->
  124. [
  125. ?_assertEqual(suffix(<<1, 2, 3, 4, 5>>, 2), <<4, 5>>),
  126. ?_assertError(badarg, prefix(<<1, 2, 3, 4, 5>>, 25))
  127. ].
  128. prefix_test_() ->
  129. [
  130. ?_assertEqual(prefix(<<1, 2, 3, 4, 5>>, 2), <<1, 2>>),
  131. ?_assertError(badarg, prefix(<<1, 2, 3, 4, 5>>, 25))
  132. ].
  133. union_test_() ->
  134. [
  135. ?_assertEqual(
  136. union(
  137. <<2#0011011:7>>,
  138. <<2#1011110:7>>
  139. ),
  140. <<2#1011111:7>>
  141. )
  142. ].
  143. inverse_test_() ->
  144. [
  145. ?_assertEqual(inverse(inverse(<<0, 1, 2>>)), <<0, 1, 2>>),
  146. ?_assertEqual(inverse(<<0>>), <<255>>),
  147. ?_assertEqual(inverse(<<2#1:1>>), <<2#0:1>>),
  148. ?_assertEqual(inverse(<<2#0:1>>), <<2#1:1>>),
  149. ?_assertEqual(
  150. inverse(<<2#01:2>>),
  151. <<2#10:2>>
  152. ),
  153. ?_assertEqual(
  154. inverse(<<2#0011011:7>>),
  155. <<2#1100100:7>>
  156. )
  157. ].
  158. intersection_test_() ->
  159. [
  160. ?_assertEqual(
  161. intersection(
  162. <<2#0011011>>,
  163. <<2#1011110>>
  164. ),
  165. <<2#0011010>>
  166. )
  167. ].
  168. subtract_test_() ->
  169. [
  170. ?_assertEqual(
  171. subtract(
  172. <<2#0011011>>,
  173. <<2#1011110>>
  174. ),
  175. <<2#0000001>>
  176. )
  177. ].
  178. optimize_patterns_test_() ->
  179. [
  180. ?_assertEqual(
  181. [<<"t">>],
  182. optimize_patterns([<<"t">>, <<"test">>])
  183. ),
  184. ?_assertEqual(
  185. [<<"t">>],
  186. optimize_patterns([<<"t">>, <<"t">>, <<"test">>])
  187. ),
  188. ?_assertEqual(
  189. [<<"t">>],
  190. optimize_patterns([<<"test">>, <<"t">>, <<"t">>])
  191. )
  192. ].