Advertisement
Guest User

Untitled

a guest
Oct 20th, 2018
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.67 KB | None | 0 0
  1. // A unit test for the Midterm #1 Langara CPSC 2150 fall 2018
  2. // Author: Gladys Monagan
  3. // version: October 12, 2018
  4. /* thanks to the following link for helping me catch exceptions:
  5. https://stackoverflow.com/questions/47583352/how-to-catch-segmentation-fault-with-google-test
  6. */
  7.  
  8. #define HAS_SEGMENTATION_FAULTS
  9.  
  10. #include "deque.h"
  11. #include "gtest/gtest.h"
  12. #include <string.h>
  13.  
  14. using std::string;
  15.  
  16. const int PILES = 100; // 10000;
  17.  
  18.  
  19. // helper function to print custom error message
  20. string COUT_ERROR(string e) {
  21. return "[ ERROR ] " + e;
  22. }
  23.  
  24. TEST(constructorTest, DefaultConstructor) {
  25. Deque deque;
  26. EXPECT_EQ("[]", deque.stringFrontToBack()) <<
  27. COUT_ERROR("the constructor should have made an empty deque");
  28. }
  29.  
  30. // empty tests
  31. TEST(isEmptyTest, NewDeque) {
  32. Deque deque;
  33. EXPECT_TRUE(deque.isEmpty()) <<
  34. COUT_ERROR("A new deque should be empty");
  35. }
  36. TEST(isEmptyTest, WithOneElementAddedAndRemovedFF) {
  37. Deque deque;
  38. deque.pushFront('a');
  39. deque.popFront();
  40. EXPECT_TRUE(deque.isEmpty()) <<
  41. COUT_ERROR("after one pushFront and one popFront deque should be empty");
  42. }
  43.  
  44. TEST(isEmptyTest, WithOneElementAddedAndRemovedFB) {
  45. Deque deque;
  46. deque.pushFront('a');
  47. deque.popBack();
  48. EXPECT_TRUE(deque.isEmpty()) <<
  49. COUT_ERROR("after one pushFront and one popBack deque should be empty");
  50. }
  51. TEST(isEmptyTest, WithOneElementAddedAndRemovedBB) {
  52. Deque deque;
  53. deque.pushBack('a');
  54. deque.popBack();
  55. EXPECT_TRUE(deque.isEmpty()) <<
  56. COUT_ERROR("after one pushBack and one popBack deque should be empty");
  57. }
  58.  
  59. TEST(isEmptyTest, WithOneElementAddedAndRemovedBF) {
  60. Deque deque;
  61. deque.pushBack('a');
  62. deque.popFront();
  63. EXPECT_TRUE(deque.isEmpty()) <<
  64. COUT_ERROR("after one pushBack and one popFront deque should be empty");
  65. }
  66.  
  67. TEST(isEmptyTest, SeveralElementAddedAndRemovedFFFF) {
  68. Deque deque;
  69. deque.pushFront('a');
  70. deque.pushFront('b');
  71. deque.popFront();
  72. deque.popFront();
  73. deque.pushFront('c');
  74. deque.popFront();
  75. deque.pushFront('d');
  76. deque.popFront();
  77. EXPECT_TRUE(deque.isEmpty()) <<
  78. COUT_ERROR("after 4 pushFronts and 4 popFronts,the queue should be empty");
  79. }
  80. TEST(isEmptyTest, SeveralElementAddedAndRemovedBBBB) {
  81. Deque deque;
  82. deque.pushBack('a');
  83. deque.popBack();
  84. deque.pushBack('b');
  85. deque.popBack();
  86. deque.pushBack('c');
  87. deque.popBack();
  88. EXPECT_TRUE(deque.isEmpty()) <<
  89. COUT_ERROR("after 3 pushBacks and 3 popBacks, the queue should be empty");
  90. }
  91. TEST(pushFrontTest, OneElement) {
  92. Deque deque;
  93. deque.pushFront('x');
  94. EXPECT_EQ("[x]", deque.stringFrontToBack()) <<
  95. COUT_ERROR("'x' was pushFronted onto an empty deque");
  96. }
  97. TEST(pushFrontTest, TwoElements) {
  98. Deque deque;
  99. deque.pushFront('z');
  100. deque.pushFront('y');
  101. EXPECT_EQ("[yz]", deque.stringFrontToBack()) <<
  102. COUT_ERROR("'z' and 'y' were pushFronted onto an empty deque");
  103. }
  104. TEST(pushFrontTest, ThreeElements) {
  105. Deque deque;
  106. deque.pushFront('z');
  107. deque.pushFront('y');
  108. deque.pushFront('x');
  109. EXPECT_EQ("[xyz]", deque.stringFrontToBack()) <<
  110. COUT_ERROR("'z', 'y', 'x' were pushFronted onto an empty deque");
  111. }
  112. TEST(pushFrontTest, PilesOfElements) {
  113. Deque deque;
  114. for (int i = 0; i < PILES; i++)
  115. deque.pushFront('x');
  116. while (!deque.isEmpty()) {
  117. //ASSERT_EXIT((deque.popFront(),exit(0)),::testing::ExitedWithCode(0),".*");
  118. deque.popFront();
  119. }
  120. }
  121. TEST(pushBackTest, OneElement) {
  122. Deque deque;
  123. deque.pushBack('a');
  124. EXPECT_EQ("[a]", deque.stringFrontToBack()) <<
  125. COUT_ERROR("'a' was pushBacked onto an empty deque");
  126. }
  127. TEST(pushBackTest, TwoElements) {
  128. Deque deque;
  129. deque.pushBack('a');
  130. deque.pushBack('b');
  131. EXPECT_EQ("[ab]", deque.stringFrontToBack()) <<
  132. COUT_ERROR("'a' and 'b' were pushBacked onto an empty deque");
  133. }
  134. TEST(pushBackTest, ThreeElements) {
  135. Deque deque;
  136. deque.pushBack('a');
  137. deque.pushBack('b');
  138. deque.pushBack('c');
  139. EXPECT_EQ("[abc]", deque.stringFrontToBack()) <<
  140. COUT_ERROR("'a', 'b', 'c' were pushBacked onto an empty deque");
  141. }
  142. TEST(pushBackTest, PilesOfElements) {
  143. Deque deque;
  144. for (int i = 0; i < PILES; i++)
  145. deque.pushBack('x');
  146. while (!deque.isEmpty()) {
  147. //ASSERT_EXIT((deque.popBack(),exit(0)),::testing::ExitedWithCode(0),".*");
  148. deque.popBack();
  149. }
  150. }
  151.  
  152. TEST(pushFrontTest, PilesOfElementsFBF) {
  153. Deque deque;
  154. for (int i = 0; i < PILES; i++) {
  155. deque.pushFront('x');
  156. deque.pushBack('a');
  157. }
  158. while (!deque.isEmpty()) {
  159. //ASSERT_EXIT((deque.popFront(),exit(0)),::testing::ExitedWithCode(0),".*");
  160. deque.popFront();
  161. }
  162. }
  163. TEST(pushFrontTest, PilesOfElementsFBFB) {
  164. Deque deque;
  165. for (int i = 0; i < PILES; i++) {
  166. deque.pushFront('x');
  167. deque.pushBack('a');
  168. }
  169. while (!deque.isEmpty()) {
  170. //ASSERT_EXIT((deque.popFront(),exit(0)),::testing::ExitedWithCode(0),".*");
  171. deque.popFront();
  172. deque.popBack();
  173. }
  174. }
  175. TEST(pushFrontTest, PilesOfElementsBFB) {
  176. Deque deque;
  177. for (int i = 0; i < PILES; i++) {
  178. deque.pushBack('a');
  179. }
  180. for (int i = 0; i < PILES; i++) {
  181. deque.pushFront('a');
  182. }
  183. while (!deque.isEmpty()) {
  184. //ASSERT_EXIT((deque.popFront(),exit(0)),::testing::ExitedWithCode(0),".*");
  185. deque.popBack();
  186. }
  187. }
  188.  
  189. TEST(pushFrontBackTest, LeaveOneElementFront) {
  190. Deque deque;
  191. deque.pushFront('b');
  192. deque.pushFront('a');
  193. ASSERT_EQ("[ab]", deque.stringFrontToBack()) <<
  194. COUT_ERROR("pushFront('b') pushFront('a')");
  195. EXPECT_EQ('a', deque.popFront()) <<
  196. COUT_ERROR("pushFront('b') pushFront('a') popFront()");
  197. EXPECT_EQ('b', deque.popFront()) <<
  198. COUT_ERROR("pushFront('b') pushFront('a') popFront() popFront()");
  199. EXPECT_EQ("[]", deque.stringFrontToBack()) <<
  200. COUT_ERROR("pushFront('b') pushFront('a') popFront() popFront()");
  201. deque.pushBack('x');
  202. EXPECT_EQ("[x]", deque.stringFrontToBack()) <<
  203. COUT_ERROR("pushFront('b') pushFront('a') popFront() popFront() pushBack('x')");
  204. EXPECT_EQ('x', deque.popFront()) <<
  205. COUT_ERROR("last element of queue");
  206. }
  207. TEST(pushFrontBackTest, LeaveOneElementBack) {
  208. Deque deque;
  209. deque.pushBack('b');
  210. deque.pushFront('a');
  211. ASSERT_EQ("[ab]", deque.stringFrontToBack()) <<
  212. COUT_ERROR("pushBack('b') pushFront('a')");
  213. EXPECT_EQ('b', deque.popBack()) <<
  214. COUT_ERROR("pushBack('b') pushFront('a') popBack()");
  215. EXPECT_EQ('a', deque.popBack()) <<
  216. COUT_ERROR("pushBack('b') pushFront('a') popBack() popBack()");
  217. EXPECT_EQ("[]", deque.stringFrontToBack()) <<
  218. COUT_ERROR("pushBack('b') pushFront('a') popBack() popBack()");
  219. deque.pushFront('x');
  220. EXPECT_EQ("[x]", deque.stringFrontToBack()) <<
  221. COUT_ERROR("pushFront('b') pushFront('a') popBack() popBack() pushBack('x')");
  222. EXPECT_EQ('x', deque.popFront()) <<
  223. COUT_ERROR("last element of queue");
  224. }
  225. TEST(pushFrontBackTest, ThreeElementsFBF) {
  226. Deque deque;
  227. deque.pushFront('b');
  228. deque.pushBack('c');
  229. deque.pushFront('a');
  230. EXPECT_EQ("[abc]", deque.stringFrontToBack()) <<
  231. COUT_ERROR("pushF('b') pushB('c') pushF('a')");
  232. }
  233. TEST(pushFrontBackTest, ThreeElementsBBF) {
  234. Deque deque;
  235. deque.pushBack('b');
  236. deque.pushBack('c');
  237. deque.pushFront('a');
  238. EXPECT_EQ("[abc]", deque.stringFrontToBack()) <<
  239. COUT_ERROR("pushB('b') pushB('c') pushF('a')");
  240. }
  241. TEST(pushFrontBackTest, ThreeElementsFFB) {
  242. Deque deque;
  243. deque.pushFront('b');
  244. deque.pushFront('a');
  245. deque.pushBack('c');
  246. EXPECT_EQ("[abc]", deque.stringFrontToBack()) <<
  247. COUT_ERROR("pushF('b') pushF('a') pushB('c')");
  248. }
  249. TEST(pushFrontBackTest, SeveralElementsFFBFB) {
  250. Deque deque;
  251. deque.pushFront('c');
  252. deque.pushFront('b');
  253. deque.pushBack('d');
  254. deque.pushFront('a');
  255. deque.pushBack('e');
  256. EXPECT_EQ("[abcde]", deque.stringFrontToBack()) <<
  257. COUT_ERROR("pushF('c') pushF('b') pushB('d') pushF('a') pushB('e')");
  258. }
  259. TEST(pushFrontBackTest, SeveralElementsBFBFB) {
  260. Deque deque;
  261. deque.pushBack('c');
  262. deque.pushFront('b');
  263. deque.pushBack('d');
  264. deque.pushFront('a');
  265. deque.pushBack('e');
  266. EXPECT_EQ("[abcde]", deque.stringFrontToBack()) <<
  267. COUT_ERROR("pushB('c') pushF('b') pushB('d') pushF('a') pushB('e')");
  268. }
  269. TEST(pushFrontBackTest, SeveralElementsBFFBF) {
  270. Deque deque;
  271. deque.pushBack('d');
  272. deque.pushFront('c');
  273. deque.pushFront('b');
  274. deque.pushBack('e');
  275. deque.pushFront('a');
  276. EXPECT_EQ("[abcde]", deque.stringFrontToBack()) <<
  277. COUT_ERROR("pushB('d') pushF('c') pushF('b') pushB('e') pushF('a')");
  278. }
  279.  
  280. TEST(popFrontTest, OneElementF) {
  281. Deque deque;
  282. deque.pushFront('x');
  283. EXPECT_EQ('x', deque.popFront()) <<
  284. COUT_ERROR("pushFront('x') and then popFront()");
  285. }
  286. TEST(popFrontTest, OneElementB) {
  287. Deque deque;
  288. deque.pushBack('a');
  289. EXPECT_EQ('a', deque.popFront()) <<
  290. COUT_ERROR("pushBack('x') and then popFront()");
  291. }
  292. TEST(popFrontTest, ManyElementsBF) {
  293. Deque deque;
  294. for (char ch = 'A'; ch <= 'Z'; ch++) {
  295. deque.pushBack(ch);
  296. }
  297. for (char ch = 'A'; ch <= 'Z'; ch++) {
  298. EXPECT_EQ(ch, deque.popFront()) <<
  299. COUT_ERROR("after pushBack of the letter popFront() failed");
  300. }
  301. }
  302. TEST(popFrontTest, ManyElementsFF) {
  303. Deque deque;
  304. for (char ch = 'A'; ch <= 'Z'; ch++) {
  305. deque.pushFront(ch);
  306. }
  307. for (char ch = 'Z'; ch <= 'A'; ch--) {
  308. EXPECT_EQ(ch, deque.popFront()) <<
  309. COUT_ERROR("after pushBack of the letter popFront() failed");
  310. }
  311. }
  312.  
  313. TEST(popBackTest, OneElementFB) {
  314. Deque deque;
  315. deque.pushFront('x');
  316. EXPECT_EQ('x', deque.popBack()) <<
  317. COUT_ERROR("pushFront('x') and then popBack()");
  318. }
  319. TEST(popBackTest, OneElementBB) {
  320. Deque deque1;
  321. deque1.pushBack('a');
  322. EXPECT_EQ('a', deque1.popBack()) <<
  323. COUT_ERROR("pushBack('x') and then popBack()");
  324. }
  325. TEST(popBackTest, ManyElementsBB) {
  326. Deque deque;
  327. for (char ch = 'A'; ch <= 'Z'; ch++) {
  328. deque.pushBack(ch);
  329. }
  330. for (char ch = 'Z'; ch <= 'A'; ch--) {
  331. EXPECT_EQ(ch, deque.popBack()) <<
  332. COUT_ERROR("after pushBack of the letter popBack() failed");
  333. }
  334. }
  335. TEST(popBackTest, ManyElementsFB) {
  336. Deque deque;
  337. for (char ch = 'A'; ch <= 'Z'; ch++) {
  338. deque.pushFront(ch);
  339. }
  340. for (char ch = 'A'; ch <= 'Z'; ch++) {
  341. EXPECT_EQ(ch, deque.popBack()) <<
  342. COUT_ERROR("after pushBack of the letter popBack() failed");
  343. }
  344. }
  345.  
  346. TEST(copyConstructorTest, EmptyDeque) {
  347. Deque deque;
  348. Deque otherDeque = deque;
  349. EXPECT_EQ(
  350. deque.stringFrontToBack(),
  351. otherDeque.stringFrontToBack()) <<
  352. COUT_ERROR("failed to copy an empty deque properly");
  353. }
  354. TEST(copyConstructorTest, DequeWithElements) {
  355. Deque deque;
  356. deque.pushFront('d');
  357. deque.pushFront('c');
  358. deque.pushFront('b');
  359. deque.pushFront('a');
  360. ASSERT_EQ("[abcd]", deque.stringFrontToBack()) <<
  361. COUT_ERROR("deque was not constructed properly");
  362. Deque copiedDeque = deque;
  363. EXPECT_EQ(
  364. deque.stringFrontToBack(),
  365. copiedDeque.stringFrontToBack()) <<
  366. COUT_ERROR("failed to copy construct the deque properly");
  367. // modify original deque which should then be different from copiedDeque's
  368. deque.popBack();
  369. deque.popBack();
  370. deque.popBack();
  371. deque.popBack();
  372. deque.pushBack('x');
  373. EXPECT_NE(
  374. deque.stringFrontToBack(),
  375. copiedDeque.stringFrontToBack()) <<
  376. COUT_ERROR("copy constructor of deque was not done properly");
  377. copiedDeque.popBack();
  378. copiedDeque.popBack();
  379. copiedDeque.popBack();
  380. copiedDeque.popBack();
  381. copiedDeque.pushFront('x');
  382. EXPECT_EQ(
  383. deque.stringFrontToBack(),
  384. copiedDeque.stringFrontToBack()) <<
  385. COUT_ERROR("after copy constructor deques constructed properly");
  386. }
  387.  
  388. TEST(copyConstructorTest, DequesWithDifferentScopes) {
  389. Deque deque;
  390. deque.pushBack('a');
  391. deque.pushBack('b');
  392. deque.pushBack('c');
  393. deque.pushBack('d');
  394. ASSERT_EQ("[abcd]", deque.stringFrontToBack()) <<
  395. COUT_ERROR("deque was not constructed properly");
  396. {
  397. Deque innerDeque(deque);
  398. EXPECT_EQ(
  399. deque.stringFrontToBack(),
  400. innerDeque.stringFrontToBack()) <<
  401. COUT_ERROR("after assignment, the deques have the same values");
  402. // presumably the destructor is called here, innerDeque goes out of scope
  403. }
  404. EXPECT_EQ("[abcd]", deque.stringFrontToBack()) <<
  405. COUT_ERROR("error after the deque it was copied from goes out of scope");
  406. }
  407.  
  408. TEST(overloadedAssignmentOperatorTest, EmptyDeque) {
  409. Deque deque;
  410. Deque otherDeque;
  411. deque = otherDeque;
  412. EXPECT_EQ(
  413. deque.stringFrontToBack(),
  414. otherDeque.stringFrontToBack()) <<
  415. COUT_ERROR("failed to assign an empty deque properly");
  416. }
  417. TEST(overloadedAssignmentOperatorTest, DequeWithOneElement) {
  418. Deque deque;
  419. deque.pushFront('j');
  420. ASSERT_EQ("[j]", deque.stringFrontToBack()) <<
  421. COUT_ERROR("original deque was not constructed properly");
  422.  
  423. Deque rtSideDeque;
  424. rtSideDeque.pushFront('a');
  425. ASSERT_EQ("[a]", rtSideDeque.stringFrontToBack()) <<
  426. COUT_ERROR("rtSideDeque was not constructed properly");
  427.  
  428. ASSERT_NE(deque.stringFrontToBack(), rtSideDeque.stringFrontToBack()) <<
  429. COUT_ERROR("both deques should be different before the overloaded assignment");
  430.  
  431. deque = rtSideDeque;
  432. EXPECT_EQ(deque.stringFrontToBack(), rtSideDeque.stringFrontToBack()) <<
  433. COUT_ERROR("both deques should have the same values");
  434. EXPECT_EQ('a', rtSideDeque.popFront()) <<
  435. COUT_ERROR("a should have popped from the rtSide");
  436. ASSERT_NE(deque.stringFrontToBack(), rtSideDeque.stringFrontToBack()) <<
  437. COUT_ERROR("both deques should be different after popping from rtSide deque");
  438. }
  439.  
  440. TEST(overloadedAssignmentOperatorTest, DequeWithElements) {
  441. Deque deque;
  442. deque.pushFront('j');
  443. deque.pushBack('k');
  444. ASSERT_EQ("[jk]", deque.stringFrontToBack()) <<
  445. COUT_ERROR("original deque was not constructed properly");
  446.  
  447. Deque rtSideDeque;
  448. rtSideDeque.pushFront('a');
  449. rtSideDeque.pushBack('b');
  450. rtSideDeque.pushBack('c');
  451. rtSideDeque.pushBack('d');
  452. ASSERT_EQ("[abcd]", rtSideDeque.stringFrontToBack()) <<
  453. COUT_ERROR("rtSideDeque was not constructed properly");
  454.  
  455. ASSERT_NE(deque.stringFrontToBack(), rtSideDeque.stringFrontToBack()) <<
  456. COUT_ERROR("both deques should be different before the overloaded assignment");
  457.  
  458. deque = rtSideDeque;
  459. EXPECT_EQ("[abcd]", rtSideDeque.stringFrontToBack()) <<
  460. COUT_ERROR("in deque = rtSideDeque both deques should have stayed the same values");
  461. EXPECT_EQ("[abcd]", deque.stringFrontToBack()) <<
  462. COUT_ERROR("deque = rtSideDeque failed");
  463. EXPECT_EQ(deque.stringFrontToBack(), rtSideDeque.stringFrontToBack()) <<
  464. COUT_ERROR("both deques should have the same values");
  465. // modify deques one at a time
  466. rtSideDeque.popFront();
  467. rtSideDeque.popFront();
  468. EXPECT_NE(deque.stringFrontToBack(), rtSideDeque.stringFrontToBack()) <<
  469. COUT_ERROR("both deques should be different from poping from one deque");
  470. deque.popFront();
  471. deque.popFront();
  472. EXPECT_EQ(deque.stringFrontToBack(), rtSideDeque.stringFrontToBack()) <<
  473. COUT_ERROR("both deques should have the same values");
  474. }
  475.  
  476. TEST(overloadedAssignmentOperatorTest, DequesWithDifferentScopes) {
  477. Deque deque;
  478. deque.pushFront('d');
  479. deque.pushFront('c');
  480. deque.pushFront('b');
  481. deque.pushFront('a');
  482. ASSERT_EQ("[abcd]", deque.stringFrontToBack()) <<
  483. COUT_ERROR("deque was not constructed properly");
  484. {
  485. Deque innerDeque;
  486. innerDeque.pushFront('z');
  487. innerDeque.pushFront('y');
  488. innerDeque.pushFront('x');
  489. ASSERT_EQ("[xyz]", innerDeque.stringFrontToBack()) <<
  490. COUT_ERROR("deque was not constructed properly");
  491. deque = innerDeque;
  492. EXPECT_EQ(
  493. deque.stringFrontToBack(),
  494. innerDeque.stringFrontToBack()) <<
  495. COUT_ERROR("after assignment, the deques have the same values");
  496. // presumably the destructor is called here, innerDeque goes out of scope
  497. }
  498. EXPECT_EQ("[xyz]", deque.stringFrontToBack()) <<
  499. COUT_ERROR("a deep copy seems to not have occurred");
  500. }
  501.  
  502.  
  503. TEST(destructorTest, EmptyDeque) {
  504. {
  505. Deque deque;
  506. ASSERT_TRUE(deque.isEmpty()) <<
  507. COUT_ERROR("should be empty => destructor test aborted");
  508. // ~Deque called
  509. }
  510. Deque deque;
  511. EXPECT_TRUE(deque.isEmpty()) <<
  512. COUT_ERROR("the destructor should have returned the memory");
  513. }
  514.  
  515. TEST(destructorTest, DequeWithElements) {
  516. {
  517. Deque deque;
  518. deque.pushFront('c');
  519. deque.pushFront('b');
  520. deque.pushFront('a');
  521. ASSERT_FALSE(deque.isEmpty()) <<
  522. COUT_ERROR("should be [ a b c ] => destructor test aborted");
  523. // ~Deque called
  524. }
  525. Deque deque;
  526. EXPECT_TRUE(deque.isEmpty()) <<
  527. COUT_ERROR("the destructor should have returned the memory");
  528. }
  529.  
  530. TEST(destructorTest, WithPointer) {
  531. Deque* p = new Deque;
  532. ASSERT_TRUE(p->isEmpty()) <<
  533. COUT_ERROR("deque pointed to should be empty => destructor test aborted");
  534. p->pushFront('s');
  535. p->pushFront('r');
  536. p->pushFront('q');
  537. p->pushFront('p');
  538. p->pushFront('o');
  539. delete p;
  540. p = new Deque;
  541. EXPECT_TRUE(p->isEmpty()) <<
  542. COUT_ERROR("deque pointed to should be empty");
  543. delete p;
  544. }
  545.  
  546. #ifdef HAS_SEGMENTATION_FAULTS
  547. TEST(popFrontThrowsTest, ThrowExceptionWhenEmpty) {
  548. Deque deque;
  549. ASSERT_EXIT((deque.popFront(),exit(0)),::testing::ExitedWithCode(0),".*");
  550. }
  551.  
  552. TEST(popBackThrowsTest, ThrowExceptionWhenEmpty) {
  553. Deque deque;
  554. ASSERT_EXIT((deque.popBack(),exit(0)),::testing::ExitedWithCode(0),".*");
  555. }
  556.  
  557. TEST(popBackThrowsTest, OneElementPoppedF) {
  558. Deque deque;
  559. deque.pushFront('x');
  560. EXPECT_EQ('x', deque.popBack()) <<
  561. COUT_ERROR("pushFront('x') and then popBack()");
  562. ASSERT_EXIT((deque.popBack(), exit(0)),::testing::ExitedWithCode(0),".*");
  563. }
  564.  
  565. TEST(popBackThrowsTest, OneElementPoppedB) {
  566. Deque deque;
  567. deque.pushBack('x');
  568. EXPECT_EQ('x', deque.popBack()) <<
  569. COUT_ERROR("pushFront('x') and then popBack()");
  570. ASSERT_EXIT((deque.popBack(), exit(0)),::testing::ExitedWithCode(0),".*");
  571. }
  572.  
  573. TEST(popFrontThrowsTest, OneElementPoppedF) {
  574. Deque deque;
  575. deque.pushFront('x');
  576. EXPECT_EQ('x', deque.popFront()) <<
  577. COUT_ERROR("pushFront('x') and then popFront()");
  578. ASSERT_EXIT((deque.popFront(),exit(0)),::testing::ExitedWithCode(0),".*le");
  579. }
  580.  
  581. TEST(popFrontThrowsTest, OneElementPoppedB) {
  582. Deque deque;
  583. deque.pushBack('x');
  584. EXPECT_EQ('x', deque.popFront()) <<
  585. COUT_ERROR("pushFront('x') and then popFront()");
  586. ASSERT_EXIT((deque.popFront(),exit(0)),::testing::ExitedWithCode(0),".*le");
  587. }
  588.  
  589. #else
  590. TEST(popFrontThrowsTest, ThrowExceptionWhenEmpty) {
  591. Deque deque;
  592. EXPECT_THROW(deque.popFront(), DequeException) <<
  593. COUT_ERROR("the deque is empty so popFront is not possible");
  594. }
  595. TEST(popBackThrowsTest, ThrowExceptionWhenEmpty) {
  596. Deque deque;
  597. EXPECT_THROW(deque.popBack(), DequeException) <<
  598. COUT_ERROR("the deque is empty so popBack is not possible");
  599. }
  600.  
  601. TEST(popBackThrowsTest, ThrowExceptionAfterPoppingSinceEmptyF) {
  602. Deque deque;
  603. deque.pushFront('x');
  604. EXPECT_EQ('x', deque.popBack()) <<
  605. COUT_ERROR("pushFront('x') and then popBack()");
  606. EXPECT_THROW(deque.popBack(), DequeException) <<
  607. COUT_ERROR("the deque is empty so popBack is not possible");
  608. }
  609.  
  610. TEST(popBackThrowsTest, ThrowExceptionAfterPoppingSinceEmptyB) {
  611. Deque deque;
  612. deque.pushBack('x');
  613. EXPECT_EQ('x', deque.popBack()) <<
  614. COUT_ERROR("pushFront('x') and then popBack()");
  615. EXPECT_THROW(deque.popBack(), DequeException) <<
  616. COUT_ERROR("the deque is empty so popBack is not possible");
  617. }
  618.  
  619. TEST(popFrontThrowsTest, ThrowExceptionAfterPoppingSinceEmptyF) {
  620. Deque deque;
  621. deque.pushFront('x');
  622. EXPECT_EQ('x', deque.popFront()) <<
  623. COUT_ERROR("pushFront('x') and then popFront()");
  624. EXPECT_THROW(deque.popFront(), DequeException) <<
  625. COUT_ERROR("the deque is empty so popFront is not possible");
  626. }
  627.  
  628. TEST(popFrontThrowsTest, ThrowExceptionAfterPoppingSinceEmptyB) {
  629. Deque deque;
  630. deque.pushBack('x');
  631. EXPECT_EQ('x', deque.popFront()) <<
  632. COUT_ERROR("pushFront('x') and then popFront()");
  633. EXPECT_THROW(deque.popFront(), DequeException) <<
  634. COUT_ERROR("the deque is empty so popFront is not possible");
  635. }
  636.  
  637. #endif
  638.  
  639. // causes a segmentation fault if not done properly
  640. // but test does not fail
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement