libpropeller
Making PropellerGCC Easier
 All Classes Files Functions Variables Enumerations Enumerator Macros Pages
scheduler.test.h
Go to the documentation of this file.
1 #include "unity.h"
2 #include "scheduler.h"
3 
4 
5 unsigned volatile int unit_CNT;
6 unsigned volatile int unit_CLKFREQ;
7 
8 
13 int default_hz = 99999999;
14 
15 class UnityTests {
16 public:
17 
18  static void setUp(void) {
19  unit_CNT = 0;
20  unit_CLKFREQ = 80000000;
21  }
22 
23  static void tearDown(void) {
24 
25  }
26 
27 
28  // -----------------------------------------------------------------------------
29 
30  static void test_SchedulerReadPeriodIncremented(void) {
31  int default_hz = 100;
32  Scheduler scheduler(default_hz * 10);
33 
34  unit_CNT += 1;
35 
36  TEST_ASSERT_FALSE(scheduler.Run());
37 
38  //At 6000 cycles and 100hz it should loop unit_CNT around.
39  //2^32 / (80000000/100) = 5368
40  for (int i = 0; i < 6000; i++) {
41  unit_CNT += unit_CLKFREQ / default_hz / 2;
42  TEST_ASSERT_FALSE(scheduler.Run());
43  unit_CNT += unit_CLKFREQ / default_hz / 2;
44  TEST_ASSERT_TRUE(scheduler.Run());
45  }
46 
47  }
48 
49 
50  // -----------------------------------------------------------------------------
51  // Test the various relative unit_CNT and nextReadTime conditions
52  // -----------------------------------------------------------------------------
53 
54  static void test_SchedulerLowBoth(void) {
55  unit_CNT = 0x0;
56  Scheduler scheduler(default_hz);
57  TEST_ASSERT_FALSE(scheduler.Run());
58  }
59 
60  static void test_SchedulerLowBothOpposite(void) {
61  unit_CNT = 0x10;
62  Scheduler scheduler(default_hz);
63  unit_CNT = 0x7FFFFFFF;
64 
65  TEST_ASSERT_TRUE(scheduler.Run());
66  }
67 
68  static void test_SchedulerHighBoth(void) {
69  unit_CNT = 0xF0000000;
70  Scheduler scheduler(default_hz);
71  TEST_ASSERT_FALSE(scheduler.Run());
72  }
73 
74  static void test_SchedulerHighBothOpposite(void) {
75  unit_CNT = 0x80000000;
76  Scheduler scheduler(default_hz);
77  unit_CNT = 0xFFFFFFFF;
78  TEST_ASSERT_TRUE(scheduler.Run());
79  }
80 
81  static void test_SchedulerRollover(void) {
82  unit_CNT = 0xFFFFFFFF;
83  Scheduler scheduler(default_hz);
84  TEST_ASSERT_FALSE(scheduler.Run());
85  }
86 
87  static void test_SchedulerRolloverOpposite(void) {
88  unit_CNT = 0xFFFFFFFF;
89  Scheduler scheduler(default_hz);
90  unit_CNT -= 1;
91  TEST_ASSERT_TRUE(scheduler.Run());
92  }
93 
94  static void test_SchedulerMedian(void) {
95  //Test across the 0x80000000 boundary.
97  Scheduler scheduler(default_hz);
98  TEST_ASSERT_FALSE(scheduler.Run());
99  }
100 
101  static void test_SchedulerMedianOpposite(void) {
102  unit_CNT = 0x80000000;
103  Scheduler scheduler(default_hz);
104  unit_CNT = 0x7FFFFFFF;
105 
106  TEST_ASSERT_TRUE(scheduler.Run());
107  }
108 
109  // -----------------------------------------------------------------------------
110 
111  static void test_SchedulerNotCalledForMultiplePeriods(void) {
112  unit_CNT = 0x0;
113  Scheduler scheduler(default_hz);
114  TEST_ASSERT_FALSE(scheduler.Run());
115  unit_CNT += (scheduler.GetTicksPerPeriod(default_hz) * 4) + 1;
116  TEST_ASSERT_TRUE(scheduler.Run());
117  TEST_ASSERT_TRUE(scheduler.Run());
118  TEST_ASSERT_TRUE(scheduler.Run());
119  TEST_ASSERT_TRUE(scheduler.Run());
120  TEST_ASSERT_FALSE(scheduler.Run());
121  }
122 
123 };
124 
125 
126 
127 
128 
129 
130 
131 
132 
133 
134 
135 
136 
137 
138 
139 
140 
141 
142