/specs/data/fibonacci.ds

http://github.com/wilkie/djehuty · Unknown · 135 lines · 115 code · 20 blank · 0 comment · 0 complexity · c4ef3d60d50c046d5fc7125370405497 MD5 · raw file

  1. module specs.data.priorityqueue;
  2. import data.fibonacci;
  3. import data.heap;
  4. import math.random;
  5. describe fibonacciHeap() {
  6. describe creation() {
  7. it should_work_as_expected() {
  8. FibonacciHeap!(int) queue = new FibonacciHeap!(int)();
  9. shouldNot(queue is null);
  10. should(queue.length == 0);
  11. }
  12. }
  13. describe add() {
  14. it should_add_an_item_to_an_empty_list() {
  15. FibonacciHeap!(int) queue = new FibonacciHeap!(int)();
  16. int item = 42;
  17. queue.add(item);
  18. should(queue.length == 1);
  19. should(queue.peek() == item);
  20. }
  21. }
  22. describe peek() {
  23. it should_return_the_first_item_in_min_heap() {
  24. auto queue = new FibonacciHeap!(int, MinHeap);
  25. queue.add(10);
  26. queue.add(4);
  27. queue.add(15);
  28. should(queue.length == 3);
  29. should(queue.peek() == 4);
  30. }
  31. it should_return_the_first_item_in_max_heap() {
  32. auto queue = new FibonacciHeap!(int, MaxHeap);
  33. queue.add(10);
  34. queue.add(4);
  35. queue.add(15);
  36. should(queue.length == 3);
  37. should(queue.peek() == 15);
  38. }
  39. it should_handle_a_heavy_workload() {
  40. auto queue = new FibonacciHeap!(int, MinHeap);
  41. int min;
  42. int val;
  43. Random r = new Random();
  44. val = cast(int)r.next();
  45. queue.add(val);
  46. min = val;
  47. for(int i; i < 100; i++) {
  48. val = cast(int)r.next();
  49. queue.add(val);
  50. if (val < min) {
  51. min = val;
  52. }
  53. }
  54. should(queue.peek() == min);
  55. int foo;
  56. int last = queue.peek();
  57. while (!queue.empty()) {
  58. foo = queue.remove();
  59. should(foo >= last);
  60. last = foo;
  61. }
  62. }
  63. }
  64. describe remove() {
  65. it should_remove_the_first_item_in_min_heap() {
  66. auto queue = new FibonacciHeap!(int, MinHeap);
  67. queue.add(10);
  68. queue.add(4);
  69. queue.add(15);
  70. should(queue.length == 3);
  71. should(queue.remove() == 4);
  72. }
  73. it should_remove_the_first_item_in_max_heap() {
  74. auto queue = new FibonacciHeap!(int, MaxHeap);
  75. queue.add(10);
  76. queue.add(4);
  77. queue.add(15);
  78. should(queue.length == 3);
  79. should(queue.remove() == 15);
  80. }
  81. }
  82. describe length() {
  83. it should_be_zero_for_an_empty_list() {
  84. auto queue = new FibonacciHeap!(int);
  85. should(queue.empty);
  86. should(queue.length == 0);
  87. }
  88. }
  89. describe clear() {
  90. it should_result_in_an_empty_list() {
  91. auto queue = new FibonacciHeap!(int);
  92. queue.add(15);
  93. queue.add(10);
  94. queue.add(24);
  95. shouldNot(queue.length == 0);
  96. shouldNot(queue.empty());
  97. queue.clear();
  98. should(queue.length == 0);
  99. should(queue.empty());
  100. }
  101. }
  102. describe empty() {
  103. it should_be_true_when_the_list_is_empty() {
  104. auto queue = new FibonacciHeap!(int);
  105. queue.add(10);
  106. shouldNot(queue.empty());
  107. queue.remove();
  108. should(queue.empty());
  109. }
  110. it should_be_true_for_a_new_list() {
  111. auto queue = new FibonacciHeap!(int);
  112. should(queue.empty());
  113. }
  114. }
  115. }