fuzzerGenerator.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include "RyanJson.h"
  2. #include "RyanJsonFuzzer.h"
  3. /**
  4. * @brief 随机节点生成器
  5. *
  6. * 用于生成随机 RyanJson 节点,服务于 Create/Insert/Replace 等测试场景。
  7. * 会覆盖基础类型(Bool/Null/Int/Double/String)与复合类型(Object/Array)。
  8. *
  9. * @param pJson 父节点上下文(当前未使用,保留扩展位)
  10. * @return RyanJson_t 生成的新节点
  11. */
  12. RyanJson_t RyanJsonFuzzerCreateRandomNodeWithKey(RyanJson_t pJson, const char *key)
  13. {
  14. (void)pJson;
  15. RyanJson_t item = NULL;
  16. uint32_t randomVal = RyanJsonFuzzerNextRand();
  17. switch (randomVal % 8)
  18. {
  19. case 0: item = RyanJsonCreateBool(key, RyanJsonTrue); break;
  20. case 1: item = RyanJsonCreateBool(key, RyanJsonFalse); break;
  21. case 2: item = RyanJsonCreateNull(key); break;
  22. case 3: item = RyanJsonCreateInt(key, (int32_t)RyanJsonFuzzerNextRand()); break;
  23. case 4: item = RyanJsonCreateDouble(key, 1.0 * RyanJsonFuzzerNextRand() / 1000.0); break;
  24. case 5:
  25. item = RyanJsonCreateString(key, "random_string"); // 当前使用固定字符串,保证可重复性
  26. break;
  27. case 6:
  28. item = RyanJsonCreateObject();
  29. if (key) { RyanJsonChangeKey(item, key); } // CreateObject 不接收 key 参数
  30. break;
  31. case 7:
  32. item = RyanJsonCreateArray();
  33. if (key) { RyanJsonChangeKey(item, key); } // CreateArray 不接收 key 参数
  34. break;
  35. }
  36. return item;
  37. }
  38. RyanJson_t RyanJsonFuzzerCreateRandomNode(RyanJson_t pJson)
  39. {
  40. return RyanJsonFuzzerCreateRandomNodeWithKey(pJson, NULL);
  41. }