shangcheng/tests/basic_test.cpp

126 lines
3.3 KiB
C++
Raw Permalink Normal View History

2026-05-06 02:54:13 +00:00
/**
* @file basic_test.cpp
* @brief 使 assert
*/
#include "product.hpp"
#include "shopping_cart.hpp"
#include "order.hpp"
#include <cassert>
#include <iostream>
#include <cmath>
/**
* @brief
*/
static void testProduct() {
Product p(1001, "Test Book", 29.99, 50);
assert(p.getId() == 1001);
assert(p.getName() == "Test Book");
assert(std::abs(p.getPrice() - 29.99) < 0.001);
assert(p.getStock() == 50);
assert(p.reduceStock(10) == true);
assert(p.getStock() == 40);
assert(p.reduceStock(100) == false); // 库存不足
assert(p.getStock() == 40);
p.addStock(5);
assert(p.getStock() == 45);
// toString 不应为空
assert(!p.toString().empty());
std::cout << "[PASS] testProduct\n";
}
/**
* @brief
*/
static void testShoppingCart() {
Product p1(2001, "Item A", 10.0, 100);
Product p2(2002, "Item B", 20.0, 100);
ShoppingCart cart;
assert(cart.isEmpty());
assert(cart.itemCount() == 0);
assert(std::abs(cart.totalPrice() - 0.0) < 0.001);
cart.addItem(p1, 2);
cart.addItem(p2, 3);
assert(!cart.isEmpty());
assert(cart.itemCount() == 2);
assert(std::abs(cart.totalPrice() - (10.0*2 + 20.0*3)) < 0.001);
// 再次添加相同商品应累加数量
cart.addItem(p1, 1);
assert(cart.itemCount() == 2);
assert(std::abs(cart.totalPrice() - (10.0*3 + 20.0*3)) < 0.001);
// 移除商品
assert(cart.removeItem(2001) == true);
assert(cart.itemCount() == 1);
// 修改数量
assert(cart.updateQuantity(2002, 5) == true);
assert(std::abs(cart.totalPrice() - 20.0*5) < 0.001);
// 修改不存在的商品
assert(cart.updateQuantity(9999, 1) == false);
// 清空
cart.clear();
assert(cart.isEmpty());
std::cout << "[PASS] testShoppingCart\n";
}
/**
* @brief
*/
static void testOrder() {
Product p1(3001, "Book", 25.0, 10);
Product p2(3002, "Pen", 3.5, 50);
ShoppingCart cart;
cart.addItem(p1, 2);
cart.addItem(p2, 4);
Order order(9001, cart);
assert(order.getOrderId() == 9001);
assert(order.getStatus() == OrderStatus::Pending);
assert(order.getItems().size() == 2);
assert(std::abs(order.totalPrice() - (25.0*2 + 3.5*4)) < 0.001);
// 确认购物车已被清空
assert(cart.isEmpty());
// 修改订单状态
order.setStatus(OrderStatus::Paid);
assert(order.getStatus() == OrderStatus::Paid);
// 订单摘要不为空
assert(!order.toString().empty());
std::cout << "[PASS] testOrder\n";
}
/**
* @brief orderStatusToString
*/
static void testOrderStatusString() {
assert(orderStatusToString(OrderStatus::Pending) == "\xe5\xbe\x85\xe6\x94\xaf\xe4\xbb\x98");
assert(orderStatusToString(OrderStatus::Delivered) == "\xe5\xb7\xb2\xe9\x80\x81\xe8\xbe\xbe");
std::cout << "[PASS] testOrderStatusString\n";
}
/**
* @brief
*/
int main() {
testProduct();
testShoppingCart();
testOrder();
testOrderStatusString();
std::cout << "\n===== \xe5\x85\xa8\xe9\x83\xa8\xe6\xb5\x8b\xe8\xaf\x95\xe9\x80\x9a\xe8\xbf\x87! =====\n"; // 全部测试通过!
return 0;
}