priority_queue_tests.erl 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. %%--------------------------------------------------------------------
  2. %% Copyright (c) 2012-2016 Feng Lee <feng@emqtt.io>.
  3. %%
  4. %% Licensed under the Apache License, Version 2.0 (the "License");
  5. %% you may not use this file except in compliance with the License.
  6. %% You may obtain a copy of the License at
  7. %%
  8. %% http://www.apache.org/licenses/LICENSE-2.0
  9. %%
  10. %% Unless required by applicable law or agreed to in writing, software
  11. %% distributed under the License is distributed on an "AS IS" BASIS,
  12. %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. %% See the License for the specific language governing permissions and
  14. %% limitations under the License.
  15. %%--------------------------------------------------------------------
  16. -module(priority_queue_tests).
  17. -include("emqttd.hrl").
  18. -ifdef(TEST).
  19. -include_lib("eunit/include/eunit.hrl").
  20. -define(PQ, priority_queue).
  21. plen_test() ->
  22. Q = ?PQ:new(),
  23. ?assertEqual(0, ?PQ:plen(0, Q)),
  24. Q0 = ?PQ:in(z, Q),
  25. ?assertEqual(1, ?PQ:plen(0, Q0)),
  26. Q1 = ?PQ:in(x, 1, Q0),
  27. ?assertEqual(1, ?PQ:plen(1, Q1)),
  28. Q2 = ?PQ:in(y, 2, Q1),
  29. ?assertEqual(1, ?PQ:plen(2, Q2)),
  30. Q3 = ?PQ:in(z, 2, Q2),
  31. ?assertEqual(2, ?PQ:plen(2, Q3)),
  32. {_, Q4} = ?PQ:out(1, Q3),
  33. ?assertEqual(0, ?PQ:plen(1, Q4)),
  34. {_, Q5} = ?PQ:out(Q4),
  35. ?assertEqual(1, ?PQ:plen(2, Q5)),
  36. {_, Q6} = ?PQ:out(Q5),
  37. ?assertEqual(0, ?PQ:plen(2, Q6)),
  38. ?assertEqual(1, ?PQ:len(Q6)),
  39. {_, Q7} = ?PQ:out(Q6),
  40. ?assertEqual(0, ?PQ:len(Q7)).
  41. out2_test() ->
  42. Els = [a, {b, 1}, {c, 1}, {d, 2}, {e, 2}, {f, 2}],
  43. Q = ?PQ:new(),
  44. Q0 = lists:foldl(
  45. fun({El, P}, Q) ->
  46. ?PQ:in(El, P, Q);
  47. (El, Q) ->
  48. ?PQ:in(El, Q)
  49. end, Q, Els),
  50. {Val, Q1} = ?PQ:out(Q0),
  51. ?assertEqual({value, d}, Val),
  52. {Val1, Q2} = ?PQ:out(2, Q1),
  53. ?assertEqual({value, e}, Val1),
  54. {Val2, Q3} = ?PQ:out(1, Q2),
  55. ?assertEqual({value, b}, Val2),
  56. {Val3, Q4} = ?PQ:out(Q3),
  57. ?assertEqual({value, f}, Val3),
  58. {Val4, Q5} = ?PQ:out(Q4),
  59. ?assertEqual({value, c}, Val4),
  60. {Val5, Q6} = ?PQ:out(Q5),
  61. ?assertEqual({value, a}, Val5),
  62. {empty, _Q7} = ?PQ:out(Q6).
  63. -endif.