emqx_utils_binary_tests.erl 5.8 KB

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