varint_test.c 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include <furi.h>
  2. #include <furi_hal.h>
  3. #include "../minunit.h"
  4. #include <toolbox/varint.h>
  5. #include <toolbox/profiler.h>
  6. MU_TEST(test_varint_basic_u) {
  7. mu_assert_int_eq(1, varint_uint32_length(0));
  8. mu_assert_int_eq(5, varint_uint32_length(UINT32_MAX));
  9. uint8_t data[8] = {};
  10. uint32_t out_value;
  11. mu_assert_int_eq(1, varint_uint32_pack(0, data));
  12. mu_assert_int_eq(1, varint_uint32_unpack(&out_value, data, 8));
  13. mu_assert_int_eq(0, out_value);
  14. mu_assert_int_eq(5, varint_uint32_pack(UINT32_MAX, data));
  15. mu_assert_int_eq(5, varint_uint32_unpack(&out_value, data, 8));
  16. mu_assert_int_eq(UINT32_MAX, out_value);
  17. }
  18. MU_TEST(test_varint_basic_i) {
  19. mu_assert_int_eq(5, varint_int32_length(INT32_MIN / 2));
  20. mu_assert_int_eq(1, varint_int32_length(0));
  21. mu_assert_int_eq(5, varint_int32_length(INT32_MAX / 2));
  22. mu_assert_int_eq(2, varint_int32_length(127));
  23. mu_assert_int_eq(2, varint_int32_length(-127));
  24. uint8_t data[8] = {};
  25. int32_t out_value;
  26. mu_assert_int_eq(1, varint_int32_pack(0, data));
  27. mu_assert_int_eq(1, varint_int32_unpack(&out_value, data, 8));
  28. mu_assert_int_eq(0, out_value);
  29. mu_assert_int_eq(2, varint_int32_pack(127, data));
  30. mu_assert_int_eq(2, varint_int32_unpack(&out_value, data, 8));
  31. mu_assert_int_eq(127, out_value);
  32. mu_assert_int_eq(2, varint_int32_pack(-127, data));
  33. mu_assert_int_eq(2, varint_int32_unpack(&out_value, data, 8));
  34. mu_assert_int_eq(-127, out_value);
  35. mu_assert_int_eq(5, varint_int32_pack(INT32_MAX, data));
  36. mu_assert_int_eq(5, varint_int32_unpack(&out_value, data, 8));
  37. mu_assert_int_eq(INT32_MAX, out_value);
  38. mu_assert_int_eq(5, varint_int32_pack(INT32_MIN / 2 + 1, data));
  39. mu_assert_int_eq(5, varint_int32_unpack(&out_value, data, 8));
  40. mu_assert_int_eq(INT32_MIN / 2 + 1, out_value);
  41. }
  42. MU_TEST(test_varint_rand_u) {
  43. uint8_t data[8] = {};
  44. uint32_t out_value;
  45. for(size_t i = 0; i < 200000; i++) {
  46. uint32_t rand_value = rand();
  47. mu_assert_int_eq(
  48. varint_uint32_pack(rand_value, data), varint_uint32_unpack(&out_value, data, 8));
  49. mu_assert_int_eq(rand_value, out_value);
  50. }
  51. }
  52. MU_TEST(test_varint_rand_i) {
  53. uint8_t data[8] = {};
  54. int32_t out_value;
  55. for(size_t i = 0; i < 200000; i++) {
  56. int32_t rand_value = rand() + (INT32_MIN / 2 + 1);
  57. mu_assert_int_eq(
  58. varint_int32_pack(rand_value, data), varint_int32_unpack(&out_value, data, 8));
  59. mu_assert_int_eq(rand_value, out_value);
  60. }
  61. }
  62. MU_TEST_SUITE(test_varint_suite) {
  63. MU_RUN_TEST(test_varint_basic_u);
  64. MU_RUN_TEST(test_varint_basic_i);
  65. MU_RUN_TEST(test_varint_rand_u);
  66. MU_RUN_TEST(test_varint_rand_i);
  67. }
  68. int run_minunit_test_varint() {
  69. MU_RUN_SUITE(test_varint_suite);
  70. return MU_EXIT_CODE;
  71. }