JXCountFormatterTests.m 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. //
  2. // JXCountFormatterTests.m
  3. // AICityTests
  4. //
  5. // Feature: 003-ios-api-https
  6. // 数字格式化工具单元测试
  7. //
  8. #import <XCTest/XCTest.h>
  9. #import "JXCountFormatter.h"
  10. @interface JXCountFormatterTests : XCTestCase
  11. @end
  12. @implementation JXCountFormatterTests
  13. #pragma mark - 基础数字格式化测试
  14. - (void)testFormatSmallNumbers {
  15. XCTAssertEqualObjects([JXCountFormatter formatCount:0], @"0");
  16. XCTAssertEqualObjects([JXCountFormatter formatCount:1], @"1");
  17. XCTAssertEqualObjects([JXCountFormatter formatCount:99], @"99");
  18. XCTAssertEqualObjects([JXCountFormatter formatCount:999], @"999");
  19. }
  20. - (void)testFormatThousandsWithK {
  21. XCTAssertEqualObjects([JXCountFormatter formatCount:1000], @"1.0k");
  22. XCTAssertEqualObjects([JXCountFormatter formatCount:1500], @"1.5k");
  23. XCTAssertEqualObjects([JXCountFormatter formatCount:9999], @"9.9k");
  24. }
  25. - (void)testFormatTenThousandsWithWan {
  26. XCTAssertEqualObjects([JXCountFormatter formatCount:10000], @"1.0万");
  27. XCTAssertEqualObjects([JXCountFormatter formatCount:15000], @"1.5万");
  28. XCTAssertEqualObjects([JXCountFormatter formatCount:100000], @"10.0万");
  29. XCTAssertEqualObjects([JXCountFormatter formatCount:999999], @"99.9万");
  30. }
  31. - (void)testFormatHundredMillionsWithYi {
  32. XCTAssertEqualObjects([JXCountFormatter formatCount:100000000], @"1.0亿");
  33. XCTAssertEqualObjects([JXCountFormatter formatCount:150000000], @"1.5亿");
  34. XCTAssertEqualObjects([JXCountFormatter formatCount:1000000000], @"10.0亿");
  35. }
  36. #pragma mark - 特定格式方法测试
  37. - (void)testSpecificFormatMethods {
  38. long long count = 12345;
  39. NSString *baseFormat = [JXCountFormatter formatCount:count];
  40. XCTAssertEqualObjects([JXCountFormatter formatLikeCount:count], baseFormat);
  41. XCTAssertEqualObjects([JXCountFormatter formatCommentCount:count], baseFormat);
  42. XCTAssertEqualObjects([JXCountFormatter formatShareCount:count], baseFormat);
  43. XCTAssertEqualObjects([JXCountFormatter formatFavoriteCount:count], baseFormat);
  44. XCTAssertEqualObjects([JXCountFormatter formatPlayCount:count], baseFormat);
  45. }
  46. #pragma mark - 真实场景测试
  47. - (void)testRealWorldExamples {
  48. // 点赞数示例
  49. XCTAssertEqualObjects([JXCountFormatter formatLikeCount:20000], @"2.0万");
  50. XCTAssertEqualObjects([JXCountFormatter formatLikeCount:1568000], @"156.8万");
  51. // 播放量示例
  52. XCTAssertEqualObjects([JXCountFormatter formatPlayCount:120000000], @"1.2亿");
  53. XCTAssertEqualObjects([JXCountFormatter formatPlayCount:5600], @"5.6k");
  54. // 评论数示例
  55. XCTAssertEqualObjects([JXCountFormatter formatCommentCount:8900], @"8.9k");
  56. XCTAssertEqualObjects([JXCountFormatter formatCommentCount:123000], @"12.3万");
  57. }
  58. #pragma mark - 边界值测试
  59. - (void)testBoundaryValues {
  60. // 边界值:999 -> 1.0k
  61. XCTAssertEqualObjects([JXCountFormatter formatCount:999], @"999");
  62. XCTAssertEqualObjects([JXCountFormatter formatCount:1000], @"1.0k");
  63. // 边界值:9999 -> 1.0万
  64. XCTAssertEqualObjects([JXCountFormatter formatCount:9999], @"9.9k");
  65. XCTAssertEqualObjects([JXCountFormatter formatCount:10000], @"1.0万");
  66. // 边界值:99999999 -> 1.0亿
  67. XCTAssertEqualObjects([JXCountFormatter formatCount:99999999], @"9999.9万");
  68. XCTAssertEqualObjects([JXCountFormatter formatCount:100000000], @"1.0亿");
  69. }
  70. #pragma mark - 精度测试
  71. - (void)testPrecision {
  72. // 测试小数点精度(四舍五入)
  73. XCTAssertEqualObjects([JXCountFormatter formatCount:12345], @"1.2万");
  74. XCTAssertEqualObjects([JXCountFormatter formatCount:12456], @"1.2万");
  75. XCTAssertEqualObjects([JXCountFormatter formatCount:12567], @"1.3万");
  76. XCTAssertEqualObjects([JXCountFormatter formatCount:123456789], @"1.2亿");
  77. XCTAssertEqualObjects([JXCountFormatter formatCount:124567890], @"1.2亿");
  78. }
  79. #pragma mark - UI显示场景测试
  80. - (void)testUIDisplayScenarios {
  81. // 新发布的视频
  82. XCTAssertEqualObjects([JXCountFormatter formatPlayCount:0], @"0");
  83. // 小众视频
  84. XCTAssertEqualObjects([JXCountFormatter formatPlayCount:123], @"123");
  85. // 热门视频
  86. XCTAssertEqualObjects([JXCountFormatter formatPlayCount:5678], @"5.6k");
  87. // 爆款视频
  88. XCTAssertEqualObjects([JXCountFormatter formatPlayCount:123456], @"12.3万");
  89. // 超级爆款
  90. XCTAssertEqualObjects([JXCountFormatter formatPlayCount:123456789], @"1.2亿");
  91. }
  92. #pragma mark - 性能测试
  93. - (void)testPerformanceFormatCount {
  94. [self measureBlock:^{
  95. for (int i = 0; i < 10000; i++) {
  96. [JXCountFormatter formatCount:i * 1000];
  97. }
  98. }];
  99. }
  100. - (void)testPerformanceFormatLargeNumbers {
  101. [self measureBlock:^{
  102. for (int i = 0; i < 10000; i++) {
  103. [JXCountFormatter formatCount:i * 100000];
  104. }
  105. }];
  106. }
  107. #pragma mark - 国际化测试
  108. - (void)testChineseFormatting {
  109. // 确保中文格式正确
  110. NSString *result = [JXCountFormatter formatCount:10000];
  111. XCTAssertTrue([result containsString:@"万"], @"应该包含'万'字");
  112. result = [JXCountFormatter formatCount:100000000];
  113. XCTAssertTrue([result containsString:@"亿"], @"应该包含'亿'字");
  114. }
  115. - (void)testEnglishFormatting {
  116. // 确保英文格式正确
  117. NSString *result = [JXCountFormatter formatCount:1000];
  118. XCTAssertTrue([result containsString:@"k"], @"应该包含'k'");
  119. }
  120. #pragma mark - 数据类型测试
  121. - (void)testLongLongSupport {
  122. // 测试大数字支持
  123. long long veryLargeNumber = 9999999999LL; // 99.9亿
  124. NSString *result = [JXCountFormatter formatCount:veryLargeNumber];
  125. XCTAssertNotNil(result);
  126. XCTAssertTrue([result containsString:@"亿"]);
  127. }
  128. - (void)testNegativeNumbers {
  129. // 虽然实际使用中不应该有负数,但测试边界情况
  130. // 根据实现,负数可能返回"0"或保持负数格式
  131. NSString *result = [JXCountFormatter formatCount:-1000];
  132. XCTAssertNotNil(result);
  133. }
  134. #pragma mark - 一致性测试
  135. - (void)testConsistencyAcrossMethods {
  136. // 确保所有格式化方法的行为一致
  137. long long testCounts[] = {0, 999, 1000, 9999, 10000, 99999, 100000, 999999, 1000000, 100000000};
  138. int numTests = sizeof(testCounts) / sizeof(testCounts[0]);
  139. for (int i = 0; i < numTests; i++) {
  140. long long count = testCounts[i];
  141. NSString *baseResult = [JXCountFormatter formatCount:count];
  142. XCTAssertEqualObjects([JXCountFormatter formatLikeCount:count], baseResult);
  143. XCTAssertEqualObjects([JXCountFormatter formatCommentCount:count], baseResult);
  144. XCTAssertEqualObjects([JXCountFormatter formatShareCount:count], baseResult);
  145. XCTAssertEqualObjects([JXCountFormatter formatFavoriteCount:count], baseResult);
  146. XCTAssertEqualObjects([JXCountFormatter formatPlayCount:count], baseResult);
  147. }
  148. }
  149. @end