本项目是一个算法与数据结构学习工程,包含多种经典算法实现和对应的单元测试。
测试文件按照算法类型进行组织:
arithmeticTests/
├── Array/ # 数组算法测试
│ ├── Array_FastSlowPointerTests.swift # 快慢指针(删除重复、移除元素、移动零)
│ ├── Array_LeftRightPointerTests.swift # 左右指针(两数之和、三数之和、回文)
│ └── Array_PrefixSumTests.swift # 前缀和(区间和、子矩阵和)
│
├── LinkList/ # 链表算法测试
│ ├── LinkList_MergeTests.swift # 链表合并(两个有序链表、K个有序链表)
│ └── LinkList_AlgorithmTests.swift # 链表算法(倒数第K个、中点、环检测、相交)
│
├── DataStructure/ # 数据结构测试
│ ├── DataStructure_LRUCacheTests.swift # LRU缓存
│ ├── DataStructure_LFUCacheTests.swift # LFU缓存
│ └── DataStructure_HashMapTests.mm # HashMap
│
└── LeetCode/ # LeetCode题目测试
└── LeetCode_0001_TwoSumTests.mm # 两数之和
- ✅ 删除排序数组中的重复元素
- ✅ 移除数组中等于指定值的元素
- ✅ 将所有0移到数组末尾
- ✅ 有序数组的两数之和
- ✅ 有序数组的三数之和
- ✅ 反转字符数组
- ✅ 判断回文串
- ✅ 最长回文子串
- ✅ 构建一维前缀和数组
- ✅ 查询区间和
- ✅ 构建二维前缀和矩阵
- ✅ 查询子矩阵和
- ✅ 合并两个有序链表
- ✅ 合并K个有序链表(优先队列实现)
- ✅ 寻找链表倒数第K个节点(快慢指针)
- ✅ 寻找链表中点(快慢指针)
- ✅ 判断链表是否包含环并找出环起点(Floyd判圈算法)
- ✅ 判断两个链表是否相交并找出交点
- ✅ O(1) 时间复杂度的 get 和 put 操作
- ✅ 使用哈希表+双向链表实现
- ✅ 淘汰最久未使用的元素
- ✅ O(1) 时间复杂度的 get 和 put 操作
- ✅ 淘汰访问频率最低的元素
- ✅ 频率相同时淘汰最早访问的元素
- ✅ 基本的 put、get、remove 操作
- ✅ 操作符重载支持
- 打开 Xcode
- 使用快捷键
Cmd + 6打开 Test Navigator - 点击任意测试类或测试方法左侧的
▶️ 按钮运行
# 运行所有 XCTest 单元测试
xcodebuild test -scheme arithmeticTests
# 运行主程序(包含内置Swift测试)
xcodebuild -scheme arithmetic build
./path/to/arithmeticcd /path/to/arithmetic
xcodebuild -scheme arithmetic
./Products/Debug/arithmetic- Array_FastSlowPointerTests: 21个测试用例
- Array_LeftRightPointerTests: 27个测试用例
- Array_PrefixSumTests: 23个测试用例
- LinkList_MergeTests: 15个测试用例
- LinkList_AlgorithmTests: 27个测试用例
- DataStructure_LRUCacheTests: 26个测试用例
- DataStructure_LFUCacheTests: 22个测试用例
- DataStructure_HashMapTests: 2个测试用例
总计: 163+ 个测试用例
- 数组 - 快慢指针(最简单)
- 数组 - 左右指针
- 链表 - 合并操作
- 链表 - 快慢指针算法
- 数组 - 前缀和数组
- 链表 - 环检测与相交检测
- LRU缓存实现
- LFU缓存实现
// 测试方法命名格式: test_功能_场景
func test_removeDuplicates_basic() // 基本功能
func test_removeDuplicates_emptyArray() // 边界情况
func test_removeElement_noMatch() // 特殊情况XCTAssertEqual(actual, expected, "失败时的提示信息")
XCTAssertNil(result, "应为nil")
XCTAssertTrue(condition, "条件应为真")每个算法至少包含:
- ✅ 基本功能测试
- ✅ 边界条件测试(空、单元素、最大值)
- ✅ 特殊场景测试
// 构建测试链表
let list = MergeSortedLists.buildList([1, 2, 3, 4, 5])
// 转换为数组验证
let array = MergeSortedLists.toArray(list)
XCTAssertEqual(array, [1, 2, 3, 4, 5])- LeetCode算法题库
- labuladong算法小抄
- Apple XCTest 文档
添加新算法测试时:
- 在对应目录创建测试文件
- 继承自
XCTestCase - 遵循命名规范
- 提供充分的测试覆盖
- 添加注释说明算法思想
- ✅ 重构测试结构,按算法类型组织
- ✅ 新增 163+ 个 XCTest 单元测试
- ✅ 添加 LRU/LFU 缓存完整测试
- ✅ 清理 main.mm 手动测试代码
- ✅ 改进测试可维护性
- 初始版本,包含基础算法实现