test_cpm.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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 CpmUnitTest : public PnetUnitTest
  20. {
  21. };
  22. TEST_F (CpmUnitTest, CpmCheckCycle)
  23. {
  24. EXPECT_EQ (-1, pf_cpm_check_cycle (1, 0xFFFF));
  25. EXPECT_EQ (-1, pf_cpm_check_cycle (1, 0));
  26. EXPECT_EQ (-1, pf_cpm_check_cycle (1, 1));
  27. EXPECT_EQ (0, pf_cpm_check_cycle (1, 2));
  28. EXPECT_EQ (0, pf_cpm_check_cycle (1, 3));
  29. /* Previous counter value was 0x4000 */
  30. EXPECT_EQ (0, pf_cpm_check_cycle (0x4000, 0x0000));
  31. EXPECT_EQ (0, pf_cpm_check_cycle (0x4000, 0x0001));
  32. EXPECT_EQ (0, pf_cpm_check_cycle (0x4000, 0x2FFE));
  33. EXPECT_EQ (0, pf_cpm_check_cycle (0x4000, 0x2FFF));
  34. EXPECT_EQ (0, pf_cpm_check_cycle (0x4000, 0x3000));
  35. EXPECT_EQ (-1, pf_cpm_check_cycle (0x4000, 0x3001));
  36. EXPECT_EQ (-1, pf_cpm_check_cycle (0x4000, 0x3002));
  37. EXPECT_EQ (-1, pf_cpm_check_cycle (0x4000, 0x3FFD));
  38. EXPECT_EQ (-1, pf_cpm_check_cycle (0x4000, 0x3FFE));
  39. EXPECT_EQ (-1, pf_cpm_check_cycle (0x4000, 0x3FFF));
  40. EXPECT_EQ (-1, pf_cpm_check_cycle (0x4000, 0x4000));
  41. EXPECT_EQ (0, pf_cpm_check_cycle (0x4000, 0x4001));
  42. EXPECT_EQ (0, pf_cpm_check_cycle (0x4000, 0x4002));
  43. EXPECT_EQ (0, pf_cpm_check_cycle (0x4000, 0xFFFF));
  44. /* Previous counter value was 0xFFFF (Forbidden zone ends at 0xFFFF) */
  45. EXPECT_EQ (0, pf_cpm_check_cycle (0xFFFF, 0xEFFE));
  46. EXPECT_EQ (0, pf_cpm_check_cycle (0xFFFF, 0xEFFF));
  47. EXPECT_EQ (-1, pf_cpm_check_cycle (0xFFFF, 0xF000));
  48. EXPECT_EQ (-1, pf_cpm_check_cycle (0xFFFF, 0xF001));
  49. EXPECT_EQ (-1, pf_cpm_check_cycle (0xFFFF, 0xFFFE));
  50. EXPECT_EQ (-1, pf_cpm_check_cycle (0xFFFF, 0xFFFF));
  51. EXPECT_EQ (0, pf_cpm_check_cycle (0xFFFF, 0x0000));
  52. EXPECT_EQ (0, pf_cpm_check_cycle (0xFFFF, 0x0001));
  53. EXPECT_EQ (0, pf_cpm_check_cycle (0xFFFF, 0x0002));
  54. /* Previous counter value was 0x0000 (Forbidden zone ends at 0x0000) */
  55. EXPECT_EQ (0, pf_cpm_check_cycle (0x0000, 0xEFFE));
  56. EXPECT_EQ (0, pf_cpm_check_cycle (0x0000, 0xEFFF));
  57. EXPECT_EQ (0, pf_cpm_check_cycle (0x0000, 0xF000));
  58. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0000, 0xF001));
  59. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0000, 0xFFFE));
  60. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0000, 0xFFFF));
  61. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0000, 0x0000));
  62. EXPECT_EQ (0, pf_cpm_check_cycle (0x0000, 0x0001));
  63. EXPECT_EQ (0, pf_cpm_check_cycle (0x0000, 0x0002));
  64. /* Previous counter value was 0x0FFE (Forbidden zone starts at 0xFFFF) */
  65. EXPECT_EQ (0, pf_cpm_check_cycle (0x0FFE, 0xFFFE));
  66. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0FFE, 0xFFFF));
  67. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0FFE, 0x0000));
  68. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0FFE, 0x0001));
  69. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0FFE, 0x0FFE));
  70. EXPECT_EQ (0, pf_cpm_check_cycle (0x0FFE, 0x0FFF));
  71. EXPECT_EQ (0, pf_cpm_check_cycle (0x0FFE, 0x1000));
  72. EXPECT_EQ (0, pf_cpm_check_cycle (0x0FFE, 0x1001));
  73. /* Previous counter value was 0x0FFF (Forbidden zone starts at zero) */
  74. EXPECT_EQ (0, pf_cpm_check_cycle (0x0FFF, 0xFFFE));
  75. EXPECT_EQ (0, pf_cpm_check_cycle (0x0FFF, 0xFFFF));
  76. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0FFF, 0x0000));
  77. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0FFF, 0x0001));
  78. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0FFF, 0x0FFE));
  79. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0FFF, 0x0FFF));
  80. EXPECT_EQ (0, pf_cpm_check_cycle (0x0FFF, 0x1000));
  81. EXPECT_EQ (0, pf_cpm_check_cycle (0x0FFF, 0x1001));
  82. /* Previous counter value was 0x0010 (Forbidden zone overlaps zero) */
  83. EXPECT_EQ (0, pf_cpm_check_cycle (0x0010, 0xF00F));
  84. EXPECT_EQ (0, pf_cpm_check_cycle (0x0010, 0xF010));
  85. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0010, 0xF011));
  86. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0010, 0xFFFE));
  87. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0010, 0xFFFF));
  88. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0010, 0x0000));
  89. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0010, 0x0001));
  90. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0010, 0x000E));
  91. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0010, 0x000F));
  92. EXPECT_EQ (-1, pf_cpm_check_cycle (0x0010, 0x0010));
  93. EXPECT_EQ (0, pf_cpm_check_cycle (0x0010, 0x0011));
  94. EXPECT_EQ (0, pf_cpm_check_cycle (0x0010, 0x0012));
  95. }