A 2D tile-based sandbox game.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ItemStack.t.cc 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include "ItemStack.h"
  2. #include "Item.h"
  3. #include "lib/test.h"
  4. class MockItem: public Swan::Item {
  5. public:
  6. MockItem(const Builder &builder): Item(builder) {}
  7. };
  8. test("Basic insert") {
  9. MockItem item1({ .name = "item1", .image = "no" });
  10. Swan::ItemStack s1(&item1, 0);
  11. Swan::ItemStack s2(&item1, 10);
  12. s2 = s1.insert(s2);
  13. expecteq(s1.count(), 10);
  14. expecteq(s2.count(), 0);
  15. }
  16. test("Insert rejects different items") {
  17. MockItem item1({ .name = "item1", .image = "no" });
  18. MockItem item2({ .name = "itemm2", .image = "no" });
  19. Swan::ItemStack s1(&item1, 5);
  20. Swan::ItemStack s2(&item2, 10);
  21. Swan::ItemStack ret = s1.insert(s2);
  22. expecteq(s1.count(), 5);
  23. expecteq(ret.count(), 10);
  24. expecteq(ret.count(), s2.count());
  25. expecteq(ret.item(), s2.item());
  26. }
  27. test("Insert never overflows") {
  28. MockItem item1({ .name = "item1", .image = "no" });
  29. Swan::ItemStack s1(&item1, 40);
  30. Swan::ItemStack s2(&item1, 40);
  31. s2 = s1.insert(s2);
  32. expecteq(s1.count(), item1.maxStack_);
  33. expecteq(s2.count(), 80 - item1.maxStack_);
  34. }
  35. test("Insert respects max_stack_") {
  36. MockItem item1({ .name = "item1", .image = "no", .maxStack = 20 });
  37. Swan::ItemStack s1(&item1, 15);
  38. Swan::ItemStack s2(&item1, 19);
  39. s2 = s1.insert(s2);
  40. expecteq(s1.count(), 20);
  41. expecteq(s2.count(), 14);
  42. }
  43. test("When insert empties an ItemStack, it should have its item nulled out") {
  44. MockItem item1({ .name = "item1", .image = "no" });
  45. MockItem item2({ .name = "itemm2", .image = "no" });
  46. Swan::ItemStack s1(&item1, 10);
  47. Swan::ItemStack s2(&item1, 10);
  48. s2 = s1.insert(s2);
  49. expecteq(s1.count(), 20);
  50. expecteq(s2.count(), 0);
  51. expecteq(s2.item(), nullptr);
  52. expect(s2.empty());
  53. }
  54. test("Insert on an empty item stack") {
  55. MockItem item1({ .name = "item1", .image = "no" });
  56. Swan::ItemStack s1(nullptr, 0);
  57. Swan::ItemStack s2(&item1, 10);
  58. s2 = s1.insert(s2);
  59. expecteq(s1.count(), 10);
  60. expecteq(s1.item(), &item1);
  61. expecteq(s2.count(), 0);
  62. expect(s2.empty());
  63. }