test_ppm.cpp 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. /*********************************************************************
  2. * _ _ _
  3. * _ __ | |_ _ | | __ _ | |__ ___
  4. * | '__|| __|(_)| | / _` || '_ \ / __|
  5. * | | | |_ _ | || (_| || |_) |\__ \
  6. * |_| \__|(_)|_| \__,_||_.__/ |___/
  7. *
  8. * www.rt-labs.com
  9. * Copyright 2018 rt-labs AB, Sweden.
  10. *
  11. * This software is dual-licensed under GPLv3 and a commercial
  12. * license. See the file LICENSE.md distributed with this software for
  13. * full license information.
  14. ********************************************************************/
  15. #include "utils_for_testing.h"
  16. #include "mocks.h"
  17. #include "pf_includes.h"
  18. #include <gtest/gtest.h>
  19. class PpmTest : public PnetIntegrationTest
  20. {
  21. };
  22. class PpmUnitTest : public PnetUnitTest
  23. {
  24. };
  25. TEST_F (PpmTest, PpmTestCalculateCycle)
  26. {
  27. /* Cycle length 31.25 us, transmission period 31.25 us */
  28. EXPECT_EQ (pf_ppm_calculate_cyclecounter (0, 1, 1), 0);
  29. EXPECT_EQ (pf_ppm_calculate_cyclecounter (20, 1, 1), 0);
  30. EXPECT_EQ (pf_ppm_calculate_cyclecounter (40, 1, 1), 1);
  31. EXPECT_EQ (pf_ppm_calculate_cyclecounter (70, 1, 1), 2);
  32. /* Cycle length 62.5 us, transmission period 62.5 us */
  33. EXPECT_EQ (pf_ppm_calculate_cyclecounter (0, 2, 1), 0);
  34. EXPECT_EQ (pf_ppm_calculate_cyclecounter (10, 2, 1), 0);
  35. EXPECT_EQ (pf_ppm_calculate_cyclecounter (50, 2, 1), 0);
  36. EXPECT_EQ (pf_ppm_calculate_cyclecounter (80, 2, 1), 2);
  37. EXPECT_EQ (pf_ppm_calculate_cyclecounter (100, 2, 1), 2);
  38. EXPECT_EQ (pf_ppm_calculate_cyclecounter (140, 2, 1), 4);
  39. EXPECT_EQ (pf_ppm_calculate_cyclecounter (160, 2, 1), 4);
  40. /* Cycle length 62.5 us, transmission period 500 us */
  41. EXPECT_EQ (pf_ppm_calculate_cyclecounter (0, 2, 8), 0);
  42. EXPECT_EQ (pf_ppm_calculate_cyclecounter (250, 2, 8), 0);
  43. EXPECT_EQ (pf_ppm_calculate_cyclecounter (750, 2, 8), 16);
  44. EXPECT_EQ (pf_ppm_calculate_cyclecounter (1250, 2, 8), 32);
  45. /* Cycle length 125 us, transmission period 500 us */
  46. EXPECT_EQ (pf_ppm_calculate_cyclecounter (0, 4, 4), 0);
  47. EXPECT_EQ (pf_ppm_calculate_cyclecounter (250, 4, 4), 0);
  48. EXPECT_EQ (pf_ppm_calculate_cyclecounter (750, 4, 4), 16);
  49. EXPECT_EQ (pf_ppm_calculate_cyclecounter (1250, 4, 4), 32);
  50. /* Cycle length 1 ms, transmission period 4 ms */
  51. EXPECT_EQ (pf_ppm_calculate_cyclecounter (0, 32, 4), 0);
  52. EXPECT_EQ (pf_ppm_calculate_cyclecounter (3000, 32, 4), 0);
  53. EXPECT_EQ (pf_ppm_calculate_cyclecounter (5000, 32, 4), 128);
  54. EXPECT_EQ (pf_ppm_calculate_cyclecounter (7000, 32, 4), 128);
  55. EXPECT_EQ (pf_ppm_calculate_cyclecounter (9000, 32, 4), 256);
  56. }
  57. TEST_F (PpmTest, PpmTestCalculateNextCycle)
  58. {
  59. /* Cycle length 31.25 us, transmission period 31.25 us */
  60. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0, 1, 1), 1);
  61. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (1, 1, 1), 2);
  62. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (2, 1, 1), 3);
  63. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (3, 1, 1), 4);
  64. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (4, 1, 1), 5);
  65. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (5, 1, 1), 6);
  66. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (6, 1, 1), 7);
  67. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFFFF, 1, 1), 0);
  68. /* Cycle length 62.5 us, transmission period 62.5 us */
  69. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0, 2, 1), 2);
  70. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (1, 2, 1), 2);
  71. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (2, 2, 1), 4);
  72. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (3, 2, 1), 4);
  73. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (4, 2, 1), 6);
  74. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (5, 2, 1), 6);
  75. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (6, 2, 1), 8);
  76. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (7, 2, 1), 8);
  77. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (8, 2, 1), 10);
  78. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (9, 2, 1), 10);
  79. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (10, 2, 1), 12);
  80. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFFFD, 2, 1), 0xFFFE);
  81. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFFFE, 2, 1), 0);
  82. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFFFF, 2, 1), 0);
  83. /* Cycle length 62.5 us, transmission period 250 us */
  84. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0, 2, 4), 8);
  85. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (7, 2, 4), 8);
  86. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (8, 2, 4), 16);
  87. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (9, 2, 4), 16);
  88. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFFFE, 2, 4), 0);
  89. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFFFF, 2, 4), 0);
  90. /* Cycle length 1 ms, transmission period 4 ms */
  91. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0, 32, 4), 128);
  92. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (1, 32, 4), 128);
  93. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (2, 32, 4), 128);
  94. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (3, 32, 4), 128);
  95. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (127, 32, 4), 128);
  96. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (128, 32, 4), 256);
  97. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (129, 32, 4), 256);
  98. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0x00, 32, 4), 0x080);
  99. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0x7F, 32, 4), 0x080);
  100. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0x80, 32, 4), 0x100);
  101. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0x81, 32, 4), 0x100);
  102. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFE, 32, 4), 0x100);
  103. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFF, 32, 4), 0x100);
  104. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0x100, 32, 4), 0x180);
  105. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0x101, 32, 4), 0x180);
  106. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFEFF, 32, 4), 0xFF00);
  107. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFF00, 32, 4), 0xFF80);
  108. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFF01, 32, 4), 0xFF80);
  109. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFF7E, 32, 4), 0xFF80);
  110. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFF7F, 32, 4), 0xFF80);
  111. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFF80, 32, 4), 0);
  112. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFF81, 32, 4), 0);
  113. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFFFE, 32, 4), 0);
  114. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFFFF, 32, 4), 0);
  115. /* Cycle length 4 ms, transmission period 2.048 s */
  116. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0, 128, 512), 0);
  117. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (1, 128, 512), 0);
  118. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (2, 128, 512), 0);
  119. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFFFE, 128, 512), 0);
  120. EXPECT_EQ (pf_ppm_calculate_next_cyclecounter (0xFFFF, 128, 512), 0);
  121. }