Dependents:   mbed-TFT-example-NCS36510 mbed-Accelerometer-example-NCS36510 mbed-Accelerometer-example-NCS36510

Committer:
jacobjohnson
Date:
Mon Feb 27 17:45:05 2017 +0000
Revision:
1:f30bdcd2b33b
Parent:
0:098463de4c5d
changed the inputscale from 1 to 7 in analogin_api.c.  This will need to be changed later, and accessed from the main level, but for now this allows the  adc to read a value from 0 to 3.7V, instead of just up to 1V.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
group-onsemi 0:098463de4c5d 1 #include "mbed.h"
group-onsemi 0:098463de4c5d 2 #include "greentea-client/test_env.h"
group-onsemi 0:098463de4c5d 3 #include "unity.h"
group-onsemi 0:098463de4c5d 4 #include "utest.h"
group-onsemi 0:098463de4c5d 5
group-onsemi 0:098463de4c5d 6 using namespace utest::v1;
group-onsemi 0:098463de4c5d 7
group-onsemi 0:098463de4c5d 8
group-onsemi 0:098463de4c5d 9 // static functions
group-onsemi 0:098463de4c5d 10 template <typename T>
group-onsemi 0:098463de4c5d 11 T static_func0()
group-onsemi 0:098463de4c5d 12 { return 0; }
group-onsemi 0:098463de4c5d 13 template <typename T>
group-onsemi 0:098463de4c5d 14 T static_func1(T a0)
group-onsemi 0:098463de4c5d 15 { return 0 | a0; }
group-onsemi 0:098463de4c5d 16 template <typename T>
group-onsemi 0:098463de4c5d 17 T static_func2(T a0, T a1)
group-onsemi 0:098463de4c5d 18 { return 0 | a0 | a1; }
group-onsemi 0:098463de4c5d 19 template <typename T>
group-onsemi 0:098463de4c5d 20 T static_func3(T a0, T a1, T a2)
group-onsemi 0:098463de4c5d 21 { return 0 | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 22 template <typename T>
group-onsemi 0:098463de4c5d 23 T static_func4(T a0, T a1, T a2, T a3)
group-onsemi 0:098463de4c5d 24 { return 0 | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 25 template <typename T>
group-onsemi 0:098463de4c5d 26 T static_func5(T a0, T a1, T a2, T a3, T a4)
group-onsemi 0:098463de4c5d 27 { return 0 | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 28
group-onsemi 0:098463de4c5d 29 // class functions
group-onsemi 0:098463de4c5d 30 template <typename T>
group-onsemi 0:098463de4c5d 31 struct Thing {
group-onsemi 0:098463de4c5d 32 T t;
group-onsemi 0:098463de4c5d 33 Thing() : t(0x80) {}
group-onsemi 0:098463de4c5d 34
group-onsemi 0:098463de4c5d 35 T member_func0()
group-onsemi 0:098463de4c5d 36 { return t; }
group-onsemi 0:098463de4c5d 37 T member_func1(T a0)
group-onsemi 0:098463de4c5d 38 { return t | a0; }
group-onsemi 0:098463de4c5d 39 T member_func2(T a0, T a1)
group-onsemi 0:098463de4c5d 40 { return t | a0 | a1; }
group-onsemi 0:098463de4c5d 41 T member_func3(T a0, T a1, T a2)
group-onsemi 0:098463de4c5d 42 { return t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 43 T member_func4(T a0, T a1, T a2, T a3)
group-onsemi 0:098463de4c5d 44 { return t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 45 T member_func5(T a0, T a1, T a2, T a3, T a4)
group-onsemi 0:098463de4c5d 46 { return t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 47
group-onsemi 0:098463de4c5d 48 T const_member_func0() const
group-onsemi 0:098463de4c5d 49 { return t; }
group-onsemi 0:098463de4c5d 50 T const_member_func1(T a0) const
group-onsemi 0:098463de4c5d 51 { return t | a0; }
group-onsemi 0:098463de4c5d 52 T const_member_func2(T a0, T a1) const
group-onsemi 0:098463de4c5d 53 { return t | a0 | a1; }
group-onsemi 0:098463de4c5d 54 T const_member_func3(T a0, T a1, T a2) const
group-onsemi 0:098463de4c5d 55 { return t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 56 T const_member_func4(T a0, T a1, T a2, T a3) const
group-onsemi 0:098463de4c5d 57 { return t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 58 T const_member_func5(T a0, T a1, T a2, T a3, T a4) const
group-onsemi 0:098463de4c5d 59 { return t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 60
group-onsemi 0:098463de4c5d 61 T volatile_member_func0() volatile
group-onsemi 0:098463de4c5d 62 { return t; }
group-onsemi 0:098463de4c5d 63 T volatile_member_func1(T a0) volatile
group-onsemi 0:098463de4c5d 64 { return t | a0; }
group-onsemi 0:098463de4c5d 65 T volatile_member_func2(T a0, T a1) volatile
group-onsemi 0:098463de4c5d 66 { return t | a0 | a1; }
group-onsemi 0:098463de4c5d 67 T volatile_member_func3(T a0, T a1, T a2) volatile
group-onsemi 0:098463de4c5d 68 { return t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 69 T volatile_member_func4(T a0, T a1, T a2, T a3) volatile
group-onsemi 0:098463de4c5d 70 { return t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 71 T volatile_member_func5(T a0, T a1, T a2, T a3, T a4) volatile
group-onsemi 0:098463de4c5d 72 { return t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 73
group-onsemi 0:098463de4c5d 74 T const_volatile_member_func0() const volatile
group-onsemi 0:098463de4c5d 75 { return t; }
group-onsemi 0:098463de4c5d 76 T const_volatile_member_func1(T a0) const volatile
group-onsemi 0:098463de4c5d 77 { return t | a0; }
group-onsemi 0:098463de4c5d 78 T const_volatile_member_func2(T a0, T a1) const volatile
group-onsemi 0:098463de4c5d 79 { return t | a0 | a1; }
group-onsemi 0:098463de4c5d 80 T const_volatile_member_func3(T a0, T a1, T a2) const volatile
group-onsemi 0:098463de4c5d 81 { return t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 82 T const_volatile_member_func4(T a0, T a1, T a2, T a3) const volatile
group-onsemi 0:098463de4c5d 83 { return t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 84 T const_volatile_member_func5(T a0, T a1, T a2, T a3, T a4) const volatile
group-onsemi 0:098463de4c5d 85 { return t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 86 };
group-onsemi 0:098463de4c5d 87
group-onsemi 0:098463de4c5d 88 // bound functions
group-onsemi 0:098463de4c5d 89 template <typename T>
group-onsemi 0:098463de4c5d 90 T bound_func0(Thing<T> *t)
group-onsemi 0:098463de4c5d 91 { return t->t; }
group-onsemi 0:098463de4c5d 92 template <typename T>
group-onsemi 0:098463de4c5d 93 T bound_func1(Thing<T> *t, T a0)
group-onsemi 0:098463de4c5d 94 { return t->t | a0; }
group-onsemi 0:098463de4c5d 95 template <typename T>
group-onsemi 0:098463de4c5d 96 T bound_func2(Thing<T> *t, T a0, T a1)
group-onsemi 0:098463de4c5d 97 { return t->t | a0 | a1; }
group-onsemi 0:098463de4c5d 98 template <typename T>
group-onsemi 0:098463de4c5d 99 T bound_func3(Thing<T> *t, T a0, T a1, T a2)
group-onsemi 0:098463de4c5d 100 { return t->t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 101 template <typename T>
group-onsemi 0:098463de4c5d 102 T bound_func4(Thing<T> *t, T a0, T a1, T a2, T a3)
group-onsemi 0:098463de4c5d 103 { return t->t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 104 template <typename T>
group-onsemi 0:098463de4c5d 105 T bound_func5(Thing<T> *t, T a0, T a1, T a2, T a3, T a4)
group-onsemi 0:098463de4c5d 106 { return t->t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 107 template <typename T>
group-onsemi 0:098463de4c5d 108 T const_bound_func0(const Thing<T> *t)
group-onsemi 0:098463de4c5d 109 { return t->t; }
group-onsemi 0:098463de4c5d 110 template <typename T>
group-onsemi 0:098463de4c5d 111 T const_bound_func1(const Thing<T> *t, T a0)
group-onsemi 0:098463de4c5d 112 { return t->t | a0; }
group-onsemi 0:098463de4c5d 113 template <typename T>
group-onsemi 0:098463de4c5d 114 T const_bound_func2(const Thing<T> *t, T a0, T a1)
group-onsemi 0:098463de4c5d 115 { return t->t | a0 | a1; }
group-onsemi 0:098463de4c5d 116 template <typename T>
group-onsemi 0:098463de4c5d 117 T const_bound_func3(const Thing<T> *t, T a0, T a1, T a2)
group-onsemi 0:098463de4c5d 118 { return t->t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 119 template <typename T>
group-onsemi 0:098463de4c5d 120 T const_bound_func4(const Thing<T> *t, T a0, T a1, T a2, T a3)
group-onsemi 0:098463de4c5d 121 { return t->t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 122 template <typename T>
group-onsemi 0:098463de4c5d 123 T const_bound_func5(const Thing<T> *t, T a0, T a1, T a2, T a3, T a4)
group-onsemi 0:098463de4c5d 124 { return t->t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 125 template <typename T>
group-onsemi 0:098463de4c5d 126 T volatile_bound_func0(volatile Thing<T> *t)
group-onsemi 0:098463de4c5d 127 { return t->t; }
group-onsemi 0:098463de4c5d 128 template <typename T>
group-onsemi 0:098463de4c5d 129 T volatile_bound_func1(volatile Thing<T> *t, T a0)
group-onsemi 0:098463de4c5d 130 { return t->t | a0; }
group-onsemi 0:098463de4c5d 131 template <typename T>
group-onsemi 0:098463de4c5d 132 T volatile_bound_func2(volatile Thing<T> *t, T a0, T a1)
group-onsemi 0:098463de4c5d 133 { return t->t | a0 | a1; }
group-onsemi 0:098463de4c5d 134 template <typename T>
group-onsemi 0:098463de4c5d 135 T volatile_bound_func3(volatile Thing<T> *t, T a0, T a1, T a2)
group-onsemi 0:098463de4c5d 136 { return t->t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 137 template <typename T>
group-onsemi 0:098463de4c5d 138 T volatile_bound_func4(volatile Thing<T> *t, T a0, T a1, T a2, T a3)
group-onsemi 0:098463de4c5d 139 { return t->t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 140 template <typename T>
group-onsemi 0:098463de4c5d 141 T volatile_bound_func5(volatile Thing<T> *t, T a0, T a1, T a2, T a3, T a4)
group-onsemi 0:098463de4c5d 142 { return t->t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 143 template <typename T>
group-onsemi 0:098463de4c5d 144 T const_volatile_bound_func0(const volatile Thing<T> *t)
group-onsemi 0:098463de4c5d 145 { return t->t; }
group-onsemi 0:098463de4c5d 146 template <typename T>
group-onsemi 0:098463de4c5d 147 T const_volatile_bound_func1(const volatile Thing<T> *t, T a0)
group-onsemi 0:098463de4c5d 148 { return t->t | a0; }
group-onsemi 0:098463de4c5d 149 template <typename T>
group-onsemi 0:098463de4c5d 150 T const_volatile_bound_func2(const volatile Thing<T> *t, T a0, T a1)
group-onsemi 0:098463de4c5d 151 { return t->t | a0 | a1; }
group-onsemi 0:098463de4c5d 152 template <typename T>
group-onsemi 0:098463de4c5d 153 T const_volatile_bound_func3(const volatile Thing<T> *t, T a0, T a1, T a2)
group-onsemi 0:098463de4c5d 154 { return t->t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 155 template <typename T>
group-onsemi 0:098463de4c5d 156 T const_volatile_bound_func4(const volatile Thing<T> *t, T a0, T a1, T a2, T a3)
group-onsemi 0:098463de4c5d 157 { return t->t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 158 template <typename T>
group-onsemi 0:098463de4c5d 159 T const_volatile_bound_func5(const volatile Thing<T> *t, T a0, T a1, T a2, T a3, T a4)
group-onsemi 0:098463de4c5d 160 { return t->t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 161
group-onsemi 0:098463de4c5d 162 // void functions
group-onsemi 0:098463de4c5d 163 template <typename T>
group-onsemi 0:098463de4c5d 164 T void_func0(void *t)
group-onsemi 0:098463de4c5d 165 { return static_cast<Thing<T>*>(t)->t; }
group-onsemi 0:098463de4c5d 166 template <typename T>
group-onsemi 0:098463de4c5d 167 T void_func1(void *t, T a0)
group-onsemi 0:098463de4c5d 168 { return static_cast<Thing<T>*>(t)->t | a0; }
group-onsemi 0:098463de4c5d 169 template <typename T>
group-onsemi 0:098463de4c5d 170 T void_func2(void *t, T a0, T a1)
group-onsemi 0:098463de4c5d 171 { return static_cast<Thing<T>*>(t)->t | a0 | a1; }
group-onsemi 0:098463de4c5d 172 template <typename T>
group-onsemi 0:098463de4c5d 173 T void_func3(void *t, T a0, T a1, T a2)
group-onsemi 0:098463de4c5d 174 { return static_cast<Thing<T>*>(t)->t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 175 template <typename T>
group-onsemi 0:098463de4c5d 176 T void_func4(void *t, T a0, T a1, T a2, T a3)
group-onsemi 0:098463de4c5d 177 { return static_cast<Thing<T>*>(t)->t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 178 template <typename T>
group-onsemi 0:098463de4c5d 179 T void_func5(void *t, T a0, T a1, T a2, T a3, T a4)
group-onsemi 0:098463de4c5d 180 { return static_cast<Thing<T>*>(t)->t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 181 template <typename T>
group-onsemi 0:098463de4c5d 182 T const_void_func0(const void *t)
group-onsemi 0:098463de4c5d 183 { return static_cast<const Thing<T>*>(t)->t; }
group-onsemi 0:098463de4c5d 184 template <typename T>
group-onsemi 0:098463de4c5d 185 T const_void_func1(const void *t, T a0)
group-onsemi 0:098463de4c5d 186 { return static_cast<const Thing<T>*>(t)->t | a0; }
group-onsemi 0:098463de4c5d 187 template <typename T>
group-onsemi 0:098463de4c5d 188 T const_void_func2(const void *t, T a0, T a1)
group-onsemi 0:098463de4c5d 189 { return static_cast<const Thing<T>*>(t)->t | a0 | a1; }
group-onsemi 0:098463de4c5d 190 template <typename T>
group-onsemi 0:098463de4c5d 191 T const_void_func3(const void *t, T a0, T a1, T a2)
group-onsemi 0:098463de4c5d 192 { return static_cast<const Thing<T>*>(t)->t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 193 template <typename T>
group-onsemi 0:098463de4c5d 194 T const_void_func4(const void *t, T a0, T a1, T a2, T a3)
group-onsemi 0:098463de4c5d 195 { return static_cast<const Thing<T>*>(t)->t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 196 template <typename T>
group-onsemi 0:098463de4c5d 197 T const_void_func5(const void *t, T a0, T a1, T a2, T a3, T a4)
group-onsemi 0:098463de4c5d 198 { return static_cast<const Thing<T>*>(t)->t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 199 template <typename T>
group-onsemi 0:098463de4c5d 200 T volatile_void_func0(volatile void *t)
group-onsemi 0:098463de4c5d 201 { return static_cast<volatile Thing<T>*>(t)->t; }
group-onsemi 0:098463de4c5d 202 template <typename T>
group-onsemi 0:098463de4c5d 203 T volatile_void_func1(volatile void *t, T a0)
group-onsemi 0:098463de4c5d 204 { return static_cast<volatile Thing<T>*>(t)->t | a0; }
group-onsemi 0:098463de4c5d 205 template <typename T>
group-onsemi 0:098463de4c5d 206 T volatile_void_func2(volatile void *t, T a0, T a1)
group-onsemi 0:098463de4c5d 207 { return static_cast<volatile Thing<T>*>(t)->t | a0 | a1; }
group-onsemi 0:098463de4c5d 208 template <typename T>
group-onsemi 0:098463de4c5d 209 T volatile_void_func3(volatile void *t, T a0, T a1, T a2)
group-onsemi 0:098463de4c5d 210 { return static_cast<volatile Thing<T>*>(t)->t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 211 template <typename T>
group-onsemi 0:098463de4c5d 212 T volatile_void_func4(volatile void *t, T a0, T a1, T a2, T a3)
group-onsemi 0:098463de4c5d 213 { return static_cast<volatile Thing<T>*>(t)->t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 214 template <typename T>
group-onsemi 0:098463de4c5d 215 T volatile_void_func5(volatile void *t, T a0, T a1, T a2, T a3, T a4)
group-onsemi 0:098463de4c5d 216 { return static_cast<volatile Thing<T>*>(t)->t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 217 template <typename T>
group-onsemi 0:098463de4c5d 218 T const_volatile_void_func0(const volatile void *t)
group-onsemi 0:098463de4c5d 219 { return static_cast<const volatile Thing<T>*>(t)->t; }
group-onsemi 0:098463de4c5d 220 template <typename T>
group-onsemi 0:098463de4c5d 221 T const_volatile_void_func1(const volatile void *t, T a0)
group-onsemi 0:098463de4c5d 222 { return static_cast<const volatile Thing<T>*>(t)->t | a0; }
group-onsemi 0:098463de4c5d 223 template <typename T>
group-onsemi 0:098463de4c5d 224 T const_volatile_void_func2(const volatile void *t, T a0, T a1)
group-onsemi 0:098463de4c5d 225 { return static_cast<const volatile Thing<T>*>(t)->t | a0 | a1; }
group-onsemi 0:098463de4c5d 226 template <typename T>
group-onsemi 0:098463de4c5d 227 T const_volatile_void_func3(const volatile void *t, T a0, T a1, T a2)
group-onsemi 0:098463de4c5d 228 { return static_cast<const volatile Thing<T>*>(t)->t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 229 template <typename T>
group-onsemi 0:098463de4c5d 230 T const_volatile_void_func4(const volatile void *t, T a0, T a1, T a2, T a3)
group-onsemi 0:098463de4c5d 231 { return static_cast<const volatile Thing<T>*>(t)->t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 232 template <typename T>
group-onsemi 0:098463de4c5d 233 T const_volatile_void_func5(const volatile void *t, T a0, T a1, T a2, T a3, T a4)
group-onsemi 0:098463de4c5d 234 { return static_cast<const volatile Thing<T>*>(t)->t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 235
group-onsemi 0:098463de4c5d 236
group-onsemi 0:098463de4c5d 237 // function call and result verification
group-onsemi 0:098463de4c5d 238 template <typename T>
group-onsemi 0:098463de4c5d 239 struct Verifier {
group-onsemi 0:098463de4c5d 240 static void verify0(Callback<T()> func) {
group-onsemi 0:098463de4c5d 241 T result = func();
group-onsemi 0:098463de4c5d 242 TEST_ASSERT_EQUAL(result, 0x00);
group-onsemi 0:098463de4c5d 243 }
group-onsemi 0:098463de4c5d 244
group-onsemi 0:098463de4c5d 245 template <typename O, typename M>
group-onsemi 0:098463de4c5d 246 static void verify0(O *obj, M method) {
group-onsemi 0:098463de4c5d 247 Callback<T()> func(obj, method);
group-onsemi 0:098463de4c5d 248 T result = func();
group-onsemi 0:098463de4c5d 249 TEST_ASSERT_EQUAL(result, 0x80);
group-onsemi 0:098463de4c5d 250 }
group-onsemi 0:098463de4c5d 251
group-onsemi 0:098463de4c5d 252 static void verify1(Callback<T(T)> func) {
group-onsemi 0:098463de4c5d 253 T result = func((1 << 0));
group-onsemi 0:098463de4c5d 254 TEST_ASSERT_EQUAL(result, 0x00 | (1 << 0));
group-onsemi 0:098463de4c5d 255 }
group-onsemi 0:098463de4c5d 256
group-onsemi 0:098463de4c5d 257 template <typename O, typename M>
group-onsemi 0:098463de4c5d 258 static void verify1(O *obj, M method) {
group-onsemi 0:098463de4c5d 259 Callback<T(T)> func(obj, method);
group-onsemi 0:098463de4c5d 260 T result = func((1 << 0));
group-onsemi 0:098463de4c5d 261 TEST_ASSERT_EQUAL(result, 0x80 | (1 << 0));
group-onsemi 0:098463de4c5d 262 }
group-onsemi 0:098463de4c5d 263
group-onsemi 0:098463de4c5d 264 static void verify2(Callback<T(T, T)> func) {
group-onsemi 0:098463de4c5d 265 T result = func((1 << 0), (1 << 1));
group-onsemi 0:098463de4c5d 266 TEST_ASSERT_EQUAL(result, 0x00 | (1 << 0) | (1 << 1));
group-onsemi 0:098463de4c5d 267 }
group-onsemi 0:098463de4c5d 268
group-onsemi 0:098463de4c5d 269 template <typename O, typename M>
group-onsemi 0:098463de4c5d 270 static void verify2(O *obj, M method) {
group-onsemi 0:098463de4c5d 271 Callback<T(T, T)> func(obj, method);
group-onsemi 0:098463de4c5d 272 T result = func((1 << 0), (1 << 1));
group-onsemi 0:098463de4c5d 273 TEST_ASSERT_EQUAL(result, 0x80 | (1 << 0) | (1 << 1));
group-onsemi 0:098463de4c5d 274 }
group-onsemi 0:098463de4c5d 275
group-onsemi 0:098463de4c5d 276 static void verify3(Callback<T(T, T, T)> func) {
group-onsemi 0:098463de4c5d 277 T result = func((1 << 0), (1 << 1), (1 << 2));
group-onsemi 0:098463de4c5d 278 TEST_ASSERT_EQUAL(result, 0x00 | (1 << 0) | (1 << 1) | (1 << 2));
group-onsemi 0:098463de4c5d 279 }
group-onsemi 0:098463de4c5d 280
group-onsemi 0:098463de4c5d 281 template <typename O, typename M>
group-onsemi 0:098463de4c5d 282 static void verify3(O *obj, M method) {
group-onsemi 0:098463de4c5d 283 Callback<T(T, T, T)> func(obj, method);
group-onsemi 0:098463de4c5d 284 T result = func((1 << 0), (1 << 1), (1 << 2));
group-onsemi 0:098463de4c5d 285 TEST_ASSERT_EQUAL(result, 0x80 | (1 << 0) | (1 << 1) | (1 << 2));
group-onsemi 0:098463de4c5d 286 }
group-onsemi 0:098463de4c5d 287
group-onsemi 0:098463de4c5d 288 static void verify4(Callback<T(T, T, T, T)> func) {
group-onsemi 0:098463de4c5d 289 T result = func((1 << 0), (1 << 1), (1 << 2), (1 << 3));
group-onsemi 0:098463de4c5d 290 TEST_ASSERT_EQUAL(result, 0x00 | (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3));
group-onsemi 0:098463de4c5d 291 }
group-onsemi 0:098463de4c5d 292
group-onsemi 0:098463de4c5d 293 template <typename O, typename M>
group-onsemi 0:098463de4c5d 294 static void verify4(O *obj, M method) {
group-onsemi 0:098463de4c5d 295 Callback<T(T, T, T, T)> func(obj, method);
group-onsemi 0:098463de4c5d 296 T result = func((1 << 0), (1 << 1), (1 << 2), (1 << 3));
group-onsemi 0:098463de4c5d 297 TEST_ASSERT_EQUAL(result, 0x80 | (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3));
group-onsemi 0:098463de4c5d 298 }
group-onsemi 0:098463de4c5d 299
group-onsemi 0:098463de4c5d 300 static void verify5(Callback<T(T, T, T, T, T)> func) {
group-onsemi 0:098463de4c5d 301 T result = func((1 << 0), (1 << 1), (1 << 2), (1 << 3), (1 << 4));
group-onsemi 0:098463de4c5d 302 TEST_ASSERT_EQUAL(result, 0x00 | (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4));
group-onsemi 0:098463de4c5d 303 }
group-onsemi 0:098463de4c5d 304
group-onsemi 0:098463de4c5d 305 template <typename O, typename M>
group-onsemi 0:098463de4c5d 306 static void verify5(O *obj, M method) {
group-onsemi 0:098463de4c5d 307 Callback<T(T, T, T, T, T)> func(obj, method);
group-onsemi 0:098463de4c5d 308 T result = func((1 << 0), (1 << 1), (1 << 2), (1 << 3), (1 << 4));
group-onsemi 0:098463de4c5d 309 TEST_ASSERT_EQUAL(result, 0x80 | (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4));
group-onsemi 0:098463de4c5d 310 }
group-onsemi 0:098463de4c5d 311 };
group-onsemi 0:098463de4c5d 312
group-onsemi 0:098463de4c5d 313
group-onsemi 0:098463de4c5d 314 // test dispatch
group-onsemi 0:098463de4c5d 315 template <typename T>
group-onsemi 0:098463de4c5d 316 void test_fparg1() {
group-onsemi 0:098463de4c5d 317 Thing<T> thing;
group-onsemi 0:098463de4c5d 318 FunctionPointerArg1<T,T> fp(static_func1<T>);
group-onsemi 0:098463de4c5d 319 Verifier<T>::verify1(fp);
group-onsemi 0:098463de4c5d 320 Verifier<T>::verify1(fp.get_function());
group-onsemi 0:098463de4c5d 321 }
group-onsemi 0:098463de4c5d 322
group-onsemi 0:098463de4c5d 323 template <typename T>
group-onsemi 0:098463de4c5d 324 void test_fparg0() {
group-onsemi 0:098463de4c5d 325 Thing<T> thing;
group-onsemi 0:098463de4c5d 326 FunctionPointerArg1<T,void> fp(static_func0<T>);
group-onsemi 0:098463de4c5d 327 Verifier<T>::verify0(fp);
group-onsemi 0:098463de4c5d 328 Verifier<T>::verify0(fp.get_function());
group-onsemi 0:098463de4c5d 329 }
group-onsemi 0:098463de4c5d 330
group-onsemi 0:098463de4c5d 331
group-onsemi 0:098463de4c5d 332 // Test setup
group-onsemi 0:098463de4c5d 333 utest::v1::status_t test_setup(const size_t number_of_cases) {
group-onsemi 0:098463de4c5d 334 GREENTEA_SETUP(10, "default_auto");
group-onsemi 0:098463de4c5d 335 return verbose_test_setup_handler(number_of_cases);
group-onsemi 0:098463de4c5d 336 }
group-onsemi 0:098463de4c5d 337
group-onsemi 0:098463de4c5d 338 Case cases[] = {
group-onsemi 0:098463de4c5d 339 Case("Testing FunctionPointerArg1 compatibility", test_fparg1<int>),
group-onsemi 0:098463de4c5d 340 Case("Testing FunctionPointer compatibility", test_fparg0<int>),
group-onsemi 0:098463de4c5d 341 };
group-onsemi 0:098463de4c5d 342
group-onsemi 0:098463de4c5d 343 Specification specification(test_setup, cases);
group-onsemi 0:098463de4c5d 344
group-onsemi 0:098463de4c5d 345 int main() {
group-onsemi 0:098463de4c5d 346 return !Harness::run(specification);
group-onsemi 0:098463de4c5d 347 }