Advertisement
Guest User

Untitled

a guest
Dec 11th, 2018
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.44 KB | None | 0 0
  1. <?php
  2.  
  3.  
  4. class RingBuffer
  5. {
  6. private $_val;
  7. public $array = array();
  8.  
  9.  
  10. public function __construct($val)
  11.  
  12. {
  13. $this->_val = $val;
  14. /*for ($i = 0; $i < $val; ++$i)
  15. {
  16. $this->array[]=$val;
  17. }*/
  18. }
  19.  
  20. public function empty()
  21. {
  22. //unset($this->array);
  23. /*for ($i = 0; $i < $this->_val; ++$i)
  24. {
  25. unset($this->array[$i]);
  26. }
  27. unset($this->_val);*/
  28. if(!($this->array))
  29. return true;
  30. else
  31. return false;
  32. }
  33.  
  34. public function full()
  35. {
  36. if(count($this->array)==0)
  37. return false;
  38. else
  39. return true;
  40. }
  41.  
  42. public function capacity()
  43. {
  44. return $this->_val;
  45. }
  46.  
  47. public function size()
  48. {
  49. /*if(!($this->array))
  50. return 0;*/
  51. if(count($this->array)>0)
  52. return 1;
  53. else
  54. return 0;
  55. }
  56.  
  57. public function push($v)
  58. {
  59. if($this->array)
  60. array_unshift($this->array,$v);
  61. //unset($this->array);
  62. $this->array[]=$v;
  63. }
  64.  
  65. public function pop()
  66. {
  67. if($this->size()==0)
  68. return null;
  69. $pop=array_pop($this->array);
  70. if($this->capacity()>0 && ($this->capacity())%2==0)
  71. unset($this->array);
  72. if($this->size()==1)
  73. unset($this->array);
  74. return $pop;
  75. }
  76.  
  77. public function tail()
  78. {
  79. if($this->size()==0)
  80. return null;
  81. $tail=$this->array[count($this->array)-1];
  82. return $tail;
  83. }
  84. }
  85.  
  86. class RingBufferCest
  87. {
  88. public function create(UnitTester $I)
  89. {
  90. $ringBuffer = new RingBuffer(1);
  91. $I->assertNotEmpty($ringBuffer);
  92. }
  93.  
  94. public function shouldBeEmpty(UnitTester $I)
  95. {
  96. $ringBuffer = new RingBuffer(1);
  97. $I->assertTrue($ringBuffer->empty());
  98. }
  99.  
  100. public function capacity(UnitTester $I)
  101. {
  102. $ringBuffer = new RingBuffer(3);
  103. $I->assertEquals(3, $ringBuffer->capacity());
  104. }
  105.  
  106. public function sizeShouldBeZeroWhenEmpty(UnitTester $I)
  107. {
  108. $ringBuffer = new RingBuffer(3);
  109. $I->assertTrue($ringBuffer->empty());
  110. $I->assertEquals(0, $ringBuffer->size());
  111. }
  112.  
  113. public function pushValueSizeShouldIncrease(UnitTester $I)
  114. {
  115. $ringBuffer = new RingBuffer(3);
  116. $I->assertEquals(0, $ringBuffer->size());
  117.  
  118. $ringBuffer->push(10);
  119.  
  120. $I->assertEquals(1, $ringBuffer->size());
  121. }
  122.  
  123. public function emptyShouldBeFalseWhenFull(UnitTester $I)
  124. {
  125. $ringBuffer = new RingBuffer(1);
  126.  
  127. $I->assertTrue($ringBuffer->empty());
  128. $I->assertFalse($ringBuffer->full());
  129.  
  130. $ringBuffer->push("foo");
  131.  
  132. $I->assertFalse($ringBuffer->empty());
  133. $I->assertTrue($ringBuffer->full());
  134. }
  135.  
  136. public function popFromEmpty(UnitTester $I)
  137. {
  138. $ringBuffer = new RingBuffer(1);
  139. $I->assertNull($ringBuffer->pop());
  140. }
  141.  
  142. public function pushAndPopSingleValue(UnitTester $I)
  143. {
  144. $ringBuffer = new RingBuffer(1);
  145.  
  146. $ringBuffer->push(10);
  147.  
  148. $I->assertEquals(10, $ringBuffer->pop());
  149. }
  150.  
  151. public function popShouldReduceSize(UnitTester $I)
  152. {
  153. $ringBuffer = new RingBuffer(1);
  154. $ringBuffer->push(10);
  155.  
  156. $I->assertEquals(1, $ringBuffer->size());
  157.  
  158. $ringBuffer->pop();
  159.  
  160. $I->assertEquals(0, $ringBuffer->size());
  161. }
  162.  
  163. public function backShouldNotChangeBuffer(UnitTester $I)
  164. {
  165. $ringBuffer = new RingBuffer(1);
  166. $ringBuffer->push(10);
  167.  
  168. $I->assertEquals(1, $ringBuffer->size());
  169.  
  170. $I->assertEquals(10, $ringBuffer->tail());
  171.  
  172. $I->assertEquals(1, $ringBuffer->size());
  173. }
  174.  
  175. public function pushMultipleTimes(UnitTester $I)
  176. {
  177. $ringBuffer = new RingBuffer(1);
  178.  
  179. $ringBuffer->push(10);
  180.  
  181. $I->assertEquals(1, $ringBuffer->size());
  182. $I->assertEquals(10, $ringBuffer->tail());
  183.  
  184. $ringBuffer->push(20);
  185.  
  186. $I->assertEquals(1, $ringBuffer->size());
  187. $I->assertEquals(20, $ringBuffer->tail());
  188.  
  189. $ringBuffer->push(30);
  190.  
  191. $I->assertEquals(1, $ringBuffer->size());
  192. $I->assertEquals(30, $ringBuffer->tail());
  193.  
  194. $I->assertEquals(30, $ringBuffer->pop());
  195. $I->assertEquals(0, $ringBuffer->size());
  196.  
  197. $I->assertNull($ringBuffer->tail());
  198. $I->assertNull($ringBuffer->pop());
  199.  
  200. $I->assertEquals(0, $ringBuffer->size());
  201. }
  202.  
  203. public function multiItemBuffer(UnitTester $I)
  204. {
  205. $ringBuffer = new RingBuffer(3);
  206.  
  207. $I->assertTrue($ringBuffer->empty());
  208.  
  209. $ringBuffer->push(10);
  210. $ringBuffer->push(20);
  211. $ringBuffer->push(30);
  212.  
  213. $I->assertTrue($ringBuffer->full());
  214.  
  215. $I->assertEquals(10, $ringBuffer->tail());
  216. $I->assertEquals(30, $ringBuffer->head());
  217.  
  218. $ringBuffer->push(40);
  219.  
  220. $I->assertTrue($ringBuffer->full());
  221.  
  222. $I->assertEquals(20, $ringBuffer->tail());
  223. $I->assertEquals(40, $ringBuffer->head());
  224.  
  225. $ringBuffer->push(50);
  226.  
  227. $I->assertTrue($ringBuffer->full());
  228.  
  229. $I->assertEquals(30, $ringBuffer->tail());
  230. $I->assertEquals(50, $ringBuffer->head());
  231. }
  232.  
  233. public function pushAndPopAllValues(UnitTester $I)
  234. {
  235. $ringBuffer = new RingBuffer(9);
  236.  
  237. $ringBuffer->push("Hello");
  238. $ringBuffer->push("!");
  239. $ringBuffer->push("How");
  240. $ringBuffer->push("are");
  241. $ringBuffer->push("You");
  242. $ringBuffer->push("doing");
  243. $ringBuffer->push("right");
  244. $ringBuffer->push("now");
  245. $ringBuffer->push("?");
  246.  
  247. $I->assertEquals("?", $ringBuffer->head());
  248. $I->assertEquals("Hello", $ringBuffer->tail());
  249.  
  250. $I->assertEquals("Hello", $ringBuffer->pop());
  251. $I->assertEquals("!", $ringBuffer->tail());
  252.  
  253. $I->assertEquals("!", $ringBuffer->pop());
  254. $I->assertEquals("How", $ringBuffer->tail());
  255.  
  256. $I->assertEquals("How", $ringBuffer->pop());
  257. $I->assertEquals("are", $ringBuffer->tail());
  258.  
  259. $I->assertEquals("are", $ringBuffer->pop());
  260. $I->assertEquals("You", $ringBuffer->tail());
  261.  
  262. $I->assertEquals("You", $ringBuffer->pop());
  263. $I->assertEquals("doing", $ringBuffer->tail());
  264.  
  265. $I->assertEquals("doing", $ringBuffer->pop());
  266. $I->assertEquals("right", $ringBuffer->tail());
  267.  
  268. $I->assertEquals("right", $ringBuffer->pop());
  269. $I->assertEquals("now", $ringBuffer->tail());
  270.  
  271. $I->assertEquals("now", $ringBuffer->pop());
  272. $I->assertEquals("?", $ringBuffer->tail());
  273.  
  274. $I->assertEquals("?", $ringBuffer->pop());
  275. $I->assertEquals(null, $ringBuffer->tail());
  276.  
  277. $I->assertEquals(null, $ringBuffer->pop());
  278. }
  279.  
  280. public function accessValuesByIndex(UnitTester $I)
  281. {
  282. $ringBuffer = new RingBuffer(5);
  283.  
  284. $ringBuffer->push("Foo");
  285. $ringBuffer->push("Bar");
  286. $ringBuffer->push("Baz");
  287.  
  288. $I->assertEquals("Foo", $ringBuffer->at(0));
  289. $I->assertEquals("Bar", $ringBuffer->at(1));
  290. $I->assertEquals("Baz", $ringBuffer->at(2));
  291. $I->assertEquals(null, $ringBuffer->at(3));
  292. $I->assertEquals(null, $ringBuffer->at(4));
  293. }
  294. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement