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() { return 0; }
group-onsemi 0:098463de4c5d 12 template <typename T>
group-onsemi 0:098463de4c5d 13 T static_func1(T a0) { return 0 | a0; }
group-onsemi 0:098463de4c5d 14 template <typename T>
group-onsemi 0:098463de4c5d 15 T static_func2(T a0, T a1) { return 0 | a0 | a1; }
group-onsemi 0:098463de4c5d 16 template <typename T>
group-onsemi 0:098463de4c5d 17 T static_func3(T a0, T a1, T a2) { return 0 | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 18 template <typename T>
group-onsemi 0:098463de4c5d 19 T static_func4(T a0, T a1, T a2, T a3) { return 0 | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 20 template <typename T>
group-onsemi 0:098463de4c5d 21 T static_func5(T a0, T a1, T a2, T a3, T a4) { return 0 | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 22
group-onsemi 0:098463de4c5d 23 // class functions
group-onsemi 0:098463de4c5d 24 template <typename T>
group-onsemi 0:098463de4c5d 25 struct Thing {
group-onsemi 0:098463de4c5d 26 T t;
group-onsemi 0:098463de4c5d 27 Thing() : t(0x80) {}
group-onsemi 0:098463de4c5d 28
group-onsemi 0:098463de4c5d 29 T member_func0() { return t; }
group-onsemi 0:098463de4c5d 30 T member_func1(T a0) { return t | a0; }
group-onsemi 0:098463de4c5d 31 T member_func2(T a0, T a1) { return t | a0 | a1; }
group-onsemi 0:098463de4c5d 32 T member_func3(T a0, T a1, T a2) { return t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 33 T member_func4(T a0, T a1, T a2, T a3) { return t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 34 T member_func5(T a0, T a1, T a2, T a3, T a4) { return t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 35
group-onsemi 0:098463de4c5d 36 T const_member_func0() const { return t; }
group-onsemi 0:098463de4c5d 37 T const_member_func1(T a0) const { return t | a0; }
group-onsemi 0:098463de4c5d 38 T const_member_func2(T a0, T a1) const { return t | a0 | a1; }
group-onsemi 0:098463de4c5d 39 T const_member_func3(T a0, T a1, T a2) const { return t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 40 T const_member_func4(T a0, T a1, T a2, T a3) const { return t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 41 T const_member_func5(T a0, T a1, T a2, T a3, T a4) const { return t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 42
group-onsemi 0:098463de4c5d 43 T volatile_member_func0() volatile { return t; }
group-onsemi 0:098463de4c5d 44 T volatile_member_func1(T a0) volatile { return t | a0; }
group-onsemi 0:098463de4c5d 45 T volatile_member_func2(T a0, T a1) volatile { return t | a0 | a1; }
group-onsemi 0:098463de4c5d 46 T volatile_member_func3(T a0, T a1, T a2) volatile { return t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 47 T volatile_member_func4(T a0, T a1, T a2, T a3) volatile { return t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 48 T volatile_member_func5(T a0, T a1, T a2, T a3, T a4) volatile { return t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 49
group-onsemi 0:098463de4c5d 50 T const_volatile_member_func0() const volatile { return t; }
group-onsemi 0:098463de4c5d 51 T const_volatile_member_func1(T a0) const volatile { return t | a0; }
group-onsemi 0:098463de4c5d 52 T const_volatile_member_func2(T a0, T a1) const volatile { return t | a0 | a1; }
group-onsemi 0:098463de4c5d 53 T const_volatile_member_func3(T a0, T a1, T a2) const volatile { return t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 54 T const_volatile_member_func4(T a0, T a1, T a2, T a3) const volatile { return t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 55 T const_volatile_member_func5(T a0, T a1, T a2, T a3, T a4) const volatile { return t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 56 };
group-onsemi 0:098463de4c5d 57
group-onsemi 0:098463de4c5d 58 // bound functions
group-onsemi 0:098463de4c5d 59 template <typename T>
group-onsemi 0:098463de4c5d 60 T bound_func0(Thing<T> *t) { return t->t; }
group-onsemi 0:098463de4c5d 61 template <typename T>
group-onsemi 0:098463de4c5d 62 T bound_func1(Thing<T> *t, T a0) { return t->t | a0; }
group-onsemi 0:098463de4c5d 63 template <typename T>
group-onsemi 0:098463de4c5d 64 T bound_func2(Thing<T> *t, T a0, T a1) { return t->t | a0 | a1; }
group-onsemi 0:098463de4c5d 65 template <typename T>
group-onsemi 0:098463de4c5d 66 T bound_func3(Thing<T> *t, T a0, T a1, T a2) { return t->t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 67 template <typename T>
group-onsemi 0:098463de4c5d 68 T bound_func4(Thing<T> *t, T a0, T a1, T a2, T a3) { return t->t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 69 template <typename T>
group-onsemi 0:098463de4c5d 70 T bound_func5(Thing<T> *t, T a0, T a1, T a2, T a3, T a4) { return t->t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 71
group-onsemi 0:098463de4c5d 72 // const bound functions
group-onsemi 0:098463de4c5d 73 template <typename T>
group-onsemi 0:098463de4c5d 74 T const_func0(const Thing<T> *t) { return t->t; }
group-onsemi 0:098463de4c5d 75 template <typename T>
group-onsemi 0:098463de4c5d 76 T const_func1(const Thing<T> *t, T a0) { return t->t | a0; }
group-onsemi 0:098463de4c5d 77 template <typename T>
group-onsemi 0:098463de4c5d 78 T const_func2(const Thing<T> *t, T a0, T a1) { return t->t | a0 | a1; }
group-onsemi 0:098463de4c5d 79 template <typename T>
group-onsemi 0:098463de4c5d 80 T const_func3(const Thing<T> *t, T a0, T a1, T a2) { return t->t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 81 template <typename T>
group-onsemi 0:098463de4c5d 82 T const_func4(const Thing<T> *t, T a0, T a1, T a2, T a3) { return t->t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 83 template <typename T>
group-onsemi 0:098463de4c5d 84 T const_func5(const Thing<T> *t, T a0, T a1, T a2, T a3, T a4) { return t->t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 85
group-onsemi 0:098463de4c5d 86 // volatile bound functions
group-onsemi 0:098463de4c5d 87 template <typename T>
group-onsemi 0:098463de4c5d 88 T volatile_func0(volatile Thing<T> *t) { return t->t; }
group-onsemi 0:098463de4c5d 89 template <typename T>
group-onsemi 0:098463de4c5d 90 T volatile_func1(volatile Thing<T> *t, T a0) { return t->t | a0; }
group-onsemi 0:098463de4c5d 91 template <typename T>
group-onsemi 0:098463de4c5d 92 T volatile_func2(volatile Thing<T> *t, T a0, T a1) { return t->t | a0 | a1; }
group-onsemi 0:098463de4c5d 93 template <typename T>
group-onsemi 0:098463de4c5d 94 T volatile_func3(volatile Thing<T> *t, T a0, T a1, T a2) { return t->t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 95 template <typename T>
group-onsemi 0:098463de4c5d 96 T volatile_func4(volatile Thing<T> *t, T a0, T a1, T a2, T a3) { return t->t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 97 template <typename T>
group-onsemi 0:098463de4c5d 98 T volatile_func5(volatile Thing<T> *t, T a0, T a1, T a2, T a3, T a4) { return t->t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 99
group-onsemi 0:098463de4c5d 100 // const volatile bound functions
group-onsemi 0:098463de4c5d 101 template <typename T>
group-onsemi 0:098463de4c5d 102 T const_volatile_func0(const volatile Thing<T> *t) { return t->t; }
group-onsemi 0:098463de4c5d 103 template <typename T>
group-onsemi 0:098463de4c5d 104 T const_volatile_func1(const volatile Thing<T> *t, T a0) { return t->t | a0; }
group-onsemi 0:098463de4c5d 105 template <typename T>
group-onsemi 0:098463de4c5d 106 T const_volatile_func2(const volatile Thing<T> *t, T a0, T a1) { return t->t | a0 | a1; }
group-onsemi 0:098463de4c5d 107 template <typename T>
group-onsemi 0:098463de4c5d 108 T const_volatile_func3(const volatile Thing<T> *t, T a0, T a1, T a2) { return t->t | a0 | a1 | a2; }
group-onsemi 0:098463de4c5d 109 template <typename T>
group-onsemi 0:098463de4c5d 110 T const_volatile_func4(const volatile Thing<T> *t, T a0, T a1, T a2, T a3) { return t->t | a0 | a1 | a2 | a3; }
group-onsemi 0:098463de4c5d 111 template <typename T>
group-onsemi 0:098463de4c5d 112 T const_volatile_func5(const volatile Thing<T> *t, T a0, T a1, T a2, T a3, T a4) { return t->t | a0 | a1 | a2 | a3 | a4; }
group-onsemi 0:098463de4c5d 113
group-onsemi 0:098463de4c5d 114
group-onsemi 0:098463de4c5d 115 // function call and result verification
group-onsemi 0:098463de4c5d 116 template <typename T>
group-onsemi 0:098463de4c5d 117 struct Verifier {
group-onsemi 0:098463de4c5d 118 static void verify0(Callback<T()> func) {
group-onsemi 0:098463de4c5d 119 T result = func();
group-onsemi 0:098463de4c5d 120 TEST_ASSERT_EQUAL(result, 0x00);
group-onsemi 0:098463de4c5d 121 }
group-onsemi 0:098463de4c5d 122
group-onsemi 0:098463de4c5d 123 template <typename O, typename M>
group-onsemi 0:098463de4c5d 124 static void verify0(O *obj, M method) {
group-onsemi 0:098463de4c5d 125 Callback<T()> func(obj, method);
group-onsemi 0:098463de4c5d 126 T result = func();
group-onsemi 0:098463de4c5d 127 TEST_ASSERT_EQUAL(result, 0x80);
group-onsemi 0:098463de4c5d 128 }
group-onsemi 0:098463de4c5d 129
group-onsemi 0:098463de4c5d 130 static void verify1(Callback<T(T)> func) {
group-onsemi 0:098463de4c5d 131 T result = func((1 << 0));
group-onsemi 0:098463de4c5d 132 TEST_ASSERT_EQUAL(result, 0x00 | (1 << 0));
group-onsemi 0:098463de4c5d 133 }
group-onsemi 0:098463de4c5d 134
group-onsemi 0:098463de4c5d 135 template <typename O, typename M>
group-onsemi 0:098463de4c5d 136 static void verify1(O *obj, M method) {
group-onsemi 0:098463de4c5d 137 Callback<T(T)> func(obj, method);
group-onsemi 0:098463de4c5d 138 T result = func((1 << 0));
group-onsemi 0:098463de4c5d 139 TEST_ASSERT_EQUAL(result, 0x80 | (1 << 0));
group-onsemi 0:098463de4c5d 140 }
group-onsemi 0:098463de4c5d 141
group-onsemi 0:098463de4c5d 142 static void verify2(Callback<T(T, T)> func) {
group-onsemi 0:098463de4c5d 143 T result = func((1 << 0), (1 << 1));
group-onsemi 0:098463de4c5d 144 TEST_ASSERT_EQUAL(result, 0x00 | (1 << 0) | (1 << 1));
group-onsemi 0:098463de4c5d 145 }
group-onsemi 0:098463de4c5d 146
group-onsemi 0:098463de4c5d 147 template <typename O, typename M>
group-onsemi 0:098463de4c5d 148 static void verify2(O *obj, M method) {
group-onsemi 0:098463de4c5d 149 Callback<T(T, T)> func(obj, method);
group-onsemi 0:098463de4c5d 150 T result = func((1 << 0), (1 << 1));
group-onsemi 0:098463de4c5d 151 TEST_ASSERT_EQUAL(result, 0x80 | (1 << 0) | (1 << 1));
group-onsemi 0:098463de4c5d 152 }
group-onsemi 0:098463de4c5d 153
group-onsemi 0:098463de4c5d 154 static void verify3(Callback<T(T, T, T)> func) {
group-onsemi 0:098463de4c5d 155 T result = func((1 << 0), (1 << 1), (1 << 2));
group-onsemi 0:098463de4c5d 156 TEST_ASSERT_EQUAL(result, 0x00 | (1 << 0) | (1 << 1) | (1 << 2));
group-onsemi 0:098463de4c5d 157 }
group-onsemi 0:098463de4c5d 158
group-onsemi 0:098463de4c5d 159 template <typename O, typename M>
group-onsemi 0:098463de4c5d 160 static void verify3(O *obj, M method) {
group-onsemi 0:098463de4c5d 161 Callback<T(T, T, T)> func(obj, method);
group-onsemi 0:098463de4c5d 162 T result = func((1 << 0), (1 << 1), (1 << 2));
group-onsemi 0:098463de4c5d 163 TEST_ASSERT_EQUAL(result, 0x80 | (1 << 0) | (1 << 1) | (1 << 2));
group-onsemi 0:098463de4c5d 164 }
group-onsemi 0:098463de4c5d 165
group-onsemi 0:098463de4c5d 166 static void verify4(Callback<T(T, T, T, T)> func) {
group-onsemi 0:098463de4c5d 167 T result = func((1 << 0), (1 << 1), (1 << 2), (1 << 3));
group-onsemi 0:098463de4c5d 168 TEST_ASSERT_EQUAL(result, 0x00 | (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3));
group-onsemi 0:098463de4c5d 169 }
group-onsemi 0:098463de4c5d 170
group-onsemi 0:098463de4c5d 171 template <typename O, typename M>
group-onsemi 0:098463de4c5d 172 static void verify4(O *obj, M method) {
group-onsemi 0:098463de4c5d 173 Callback<T(T, T, T, T)> func(obj, method);
group-onsemi 0:098463de4c5d 174 T result = func((1 << 0), (1 << 1), (1 << 2), (1 << 3));
group-onsemi 0:098463de4c5d 175 TEST_ASSERT_EQUAL(result, 0x80 | (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3));
group-onsemi 0:098463de4c5d 176 }
group-onsemi 0:098463de4c5d 177
group-onsemi 0:098463de4c5d 178 static void verify5(Callback<T(T, T, T, T, T)> func) {
group-onsemi 0:098463de4c5d 179 T result = func((1 << 0), (1 << 1), (1 << 2), (1 << 3), (1 << 4));
group-onsemi 0:098463de4c5d 180 TEST_ASSERT_EQUAL(result, 0x00 | (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4));
group-onsemi 0:098463de4c5d 181 }
group-onsemi 0:098463de4c5d 182
group-onsemi 0:098463de4c5d 183 template <typename O, typename M>
group-onsemi 0:098463de4c5d 184 static void verify5(O *obj, M method) {
group-onsemi 0:098463de4c5d 185 Callback<T(T, T, T, T, T)> func(obj, method);
group-onsemi 0:098463de4c5d 186 T result = func((1 << 0), (1 << 1), (1 << 2), (1 << 3), (1 << 4));
group-onsemi 0:098463de4c5d 187 TEST_ASSERT_EQUAL(result, 0x80 | (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4));
group-onsemi 0:098463de4c5d 188 }
group-onsemi 0:098463de4c5d 189 };
group-onsemi 0:098463de4c5d 190
group-onsemi 0:098463de4c5d 191
group-onsemi 0:098463de4c5d 192 // test dispatch
group-onsemi 0:098463de4c5d 193 template <typename T>
group-onsemi 0:098463de4c5d 194 void test_dispatch0() {
group-onsemi 0:098463de4c5d 195 Thing<T> thing;
group-onsemi 0:098463de4c5d 196 Verifier<T>::verify0(static_func0<T>);
group-onsemi 0:098463de4c5d 197 Verifier<T>::verify0(&thing, &Thing<T>::member_func0);
group-onsemi 0:098463de4c5d 198 Verifier<T>::verify0((const Thing<T>*)&thing, &Thing<T>::const_member_func0);
group-onsemi 0:098463de4c5d 199 Verifier<T>::verify0((volatile Thing<T>*)&thing, &Thing<T>::volatile_member_func0);
group-onsemi 0:098463de4c5d 200 Verifier<T>::verify0((const volatile Thing<T>*)&thing, &Thing<T>::const_volatile_member_func0);
group-onsemi 0:098463de4c5d 201 Verifier<T>::verify0(&bound_func0<T>, &thing);
group-onsemi 0:098463de4c5d 202 Verifier<T>::verify0(&const_func0<T>, (const Thing<T>*)&thing);
group-onsemi 0:098463de4c5d 203 Verifier<T>::verify0(&volatile_func0<T>, (volatile Thing<T>*)&thing);
group-onsemi 0:098463de4c5d 204 Verifier<T>::verify0(&const_volatile_func0<T>, (const volatile Thing<T>*)&thing);
group-onsemi 0:098463de4c5d 205 Verifier<T>::verify0(callback(static_func0<T>));
group-onsemi 0:098463de4c5d 206
group-onsemi 0:098463de4c5d 207 Callback<T()> cb(static_func0);
group-onsemi 0:098463de4c5d 208 Verifier<T>::verify0(cb);
group-onsemi 0:098463de4c5d 209 cb = static_func0;
group-onsemi 0:098463de4c5d 210 Verifier<T>::verify0(cb);
group-onsemi 0:098463de4c5d 211 cb.attach(&bound_func0<T>, &thing);
group-onsemi 0:098463de4c5d 212 Verifier<T>::verify0(&cb, &Callback<T()>::call);
group-onsemi 0:098463de4c5d 213 Verifier<T>::verify0(&Callback<T()>::thunk, (void*)&cb);
group-onsemi 0:098463de4c5d 214 }
group-onsemi 0:098463de4c5d 215
group-onsemi 0:098463de4c5d 216 template <typename T>
group-onsemi 0:098463de4c5d 217 void test_dispatch1() {
group-onsemi 0:098463de4c5d 218 Thing<T> thing;
group-onsemi 0:098463de4c5d 219 Verifier<T>::verify1(static_func1<T>);
group-onsemi 0:098463de4c5d 220 Verifier<T>::verify1(&thing, &Thing<T>::member_func1);
group-onsemi 0:098463de4c5d 221 Verifier<T>::verify1((const Thing<T>*)&thing, &Thing<T>::const_member_func1);
group-onsemi 0:098463de4c5d 222 Verifier<T>::verify1((volatile Thing<T>*)&thing, &Thing<T>::volatile_member_func1);
group-onsemi 0:098463de4c5d 223 Verifier<T>::verify1((const volatile Thing<T>*)&thing, &Thing<T>::const_volatile_member_func1);
group-onsemi 0:098463de4c5d 224 Verifier<T>::verify1(&bound_func1<T>, &thing);
group-onsemi 0:098463de4c5d 225 Verifier<T>::verify1(&const_func1<T>, (const Thing<T>*)&thing);
group-onsemi 0:098463de4c5d 226 Verifier<T>::verify1(&volatile_func1<T>, (volatile Thing<T>*)&thing);
group-onsemi 0:098463de4c5d 227 Verifier<T>::verify1(&const_volatile_func1<T>, (const volatile Thing<T>*)&thing);
group-onsemi 0:098463de4c5d 228 Verifier<T>::verify1(callback(static_func1<T>));
group-onsemi 0:098463de4c5d 229
group-onsemi 0:098463de4c5d 230 Callback<T(T)> cb(static_func1);
group-onsemi 0:098463de4c5d 231 Verifier<T>::verify1(cb);
group-onsemi 0:098463de4c5d 232 cb = static_func1;
group-onsemi 0:098463de4c5d 233 Verifier<T>::verify1(cb);
group-onsemi 0:098463de4c5d 234 cb.attach(&bound_func1<T>, &thing);
group-onsemi 0:098463de4c5d 235 Verifier<T>::verify1(&cb, &Callback<T(T)>::call);
group-onsemi 0:098463de4c5d 236 Verifier<T>::verify1(&Callback<T(T)>::thunk, (void*)&cb);
group-onsemi 0:098463de4c5d 237 }
group-onsemi 0:098463de4c5d 238
group-onsemi 0:098463de4c5d 239 template <typename T>
group-onsemi 0:098463de4c5d 240 void test_dispatch2() {
group-onsemi 0:098463de4c5d 241 Thing<T> thing;
group-onsemi 0:098463de4c5d 242 Verifier<T>::verify2(static_func2<T>);
group-onsemi 0:098463de4c5d 243 Verifier<T>::verify2(&thing, &Thing<T>::member_func2);
group-onsemi 0:098463de4c5d 244 Verifier<T>::verify2((const Thing<T>*)&thing, &Thing<T>::const_member_func2);
group-onsemi 0:098463de4c5d 245 Verifier<T>::verify2((volatile Thing<T>*)&thing, &Thing<T>::volatile_member_func2);
group-onsemi 0:098463de4c5d 246 Verifier<T>::verify2((const volatile Thing<T>*)&thing, &Thing<T>::const_volatile_member_func2);
group-onsemi 0:098463de4c5d 247 Verifier<T>::verify2(&bound_func2<T>, &thing);
group-onsemi 0:098463de4c5d 248 Verifier<T>::verify2(&const_func2<T>, (const Thing<T>*)&thing);
group-onsemi 0:098463de4c5d 249 Verifier<T>::verify2(&volatile_func2<T>, (volatile Thing<T>*)&thing);
group-onsemi 0:098463de4c5d 250 Verifier<T>::verify2(&const_volatile_func2<T>, (const volatile Thing<T>*)&thing);
group-onsemi 0:098463de4c5d 251 Verifier<T>::verify2(callback(static_func2<T>));
group-onsemi 0:098463de4c5d 252
group-onsemi 0:098463de4c5d 253 Callback<T(T, T)> cb(static_func2);
group-onsemi 0:098463de4c5d 254 Verifier<T>::verify2(cb);
group-onsemi 0:098463de4c5d 255 cb = static_func2;
group-onsemi 0:098463de4c5d 256 Verifier<T>::verify2(cb);
group-onsemi 0:098463de4c5d 257 cb.attach(&bound_func2<T>, &thing);
group-onsemi 0:098463de4c5d 258 Verifier<T>::verify2(&cb, &Callback<T(T, T)>::call);
group-onsemi 0:098463de4c5d 259 Verifier<T>::verify2(&Callback<T(T, T)>::thunk, (void*)&cb);
group-onsemi 0:098463de4c5d 260 }
group-onsemi 0:098463de4c5d 261
group-onsemi 0:098463de4c5d 262 template <typename T>
group-onsemi 0:098463de4c5d 263 void test_dispatch3() {
group-onsemi 0:098463de4c5d 264 Thing<T> thing;
group-onsemi 0:098463de4c5d 265 Verifier<T>::verify3(static_func3<T>);
group-onsemi 0:098463de4c5d 266 Verifier<T>::verify3(&thing, &Thing<T>::member_func3);
group-onsemi 0:098463de4c5d 267 Verifier<T>::verify3((const Thing<T>*)&thing, &Thing<T>::const_member_func3);
group-onsemi 0:098463de4c5d 268 Verifier<T>::verify3((volatile Thing<T>*)&thing, &Thing<T>::volatile_member_func3);
group-onsemi 0:098463de4c5d 269 Verifier<T>::verify3((const volatile Thing<T>*)&thing, &Thing<T>::const_volatile_member_func3);
group-onsemi 0:098463de4c5d 270 Verifier<T>::verify3(&bound_func3<T>, &thing);
group-onsemi 0:098463de4c5d 271 Verifier<T>::verify3(&const_func3<T>, (const Thing<T>*)&thing);
group-onsemi 0:098463de4c5d 272 Verifier<T>::verify3(&volatile_func3<T>, (volatile Thing<T>*)&thing);
group-onsemi 0:098463de4c5d 273 Verifier<T>::verify3(&const_volatile_func3<T>, (const volatile Thing<T>*)&thing);
group-onsemi 0:098463de4c5d 274 Verifier<T>::verify3(callback(static_func3<T>));
group-onsemi 0:098463de4c5d 275
group-onsemi 0:098463de4c5d 276 Callback<T(T, T, T)> cb(static_func3);
group-onsemi 0:098463de4c5d 277 Verifier<T>::verify3(cb);
group-onsemi 0:098463de4c5d 278 cb = static_func3;
group-onsemi 0:098463de4c5d 279 Verifier<T>::verify3(cb);
group-onsemi 0:098463de4c5d 280 cb.attach(&bound_func3<T>, &thing);
group-onsemi 0:098463de4c5d 281 Verifier<T>::verify3(&cb, &Callback<T(T, T, T)>::call);
group-onsemi 0:098463de4c5d 282 Verifier<T>::verify3(&Callback<T(T, T, T)>::thunk, (void*)&cb);
group-onsemi 0:098463de4c5d 283 }
group-onsemi 0:098463de4c5d 284
group-onsemi 0:098463de4c5d 285 template <typename T>
group-onsemi 0:098463de4c5d 286 void test_dispatch4() {
group-onsemi 0:098463de4c5d 287 Thing<T> thing;
group-onsemi 0:098463de4c5d 288 Verifier<T>::verify4(static_func4<T>);
group-onsemi 0:098463de4c5d 289 Verifier<T>::verify4(&thing, &Thing<T>::member_func4);
group-onsemi 0:098463de4c5d 290 Verifier<T>::verify4((const Thing<T>*)&thing, &Thing<T>::const_member_func4);
group-onsemi 0:098463de4c5d 291 Verifier<T>::verify4((volatile Thing<T>*)&thing, &Thing<T>::volatile_member_func4);
group-onsemi 0:098463de4c5d 292 Verifier<T>::verify4((const volatile Thing<T>*)&thing, &Thing<T>::const_volatile_member_func4);
group-onsemi 0:098463de4c5d 293 Verifier<T>::verify4(&bound_func4<T>, &thing);
group-onsemi 0:098463de4c5d 294 Verifier<T>::verify4(&const_func4<T>, (const Thing<T>*)&thing);
group-onsemi 0:098463de4c5d 295 Verifier<T>::verify4(&volatile_func4<T>, (volatile Thing<T>*)&thing);
group-onsemi 0:098463de4c5d 296 Verifier<T>::verify4(&const_volatile_func4<T>, (const volatile Thing<T>*)&thing);
group-onsemi 0:098463de4c5d 297 Verifier<T>::verify4(callback(static_func4<T>));
group-onsemi 0:098463de4c5d 298
group-onsemi 0:098463de4c5d 299 Callback<T(T, T, T, T)> cb(static_func4);
group-onsemi 0:098463de4c5d 300 Verifier<T>::verify4(cb);
group-onsemi 0:098463de4c5d 301 cb = static_func4;
group-onsemi 0:098463de4c5d 302 Verifier<T>::verify4(cb);
group-onsemi 0:098463de4c5d 303 cb.attach(&bound_func4<T>, &thing);
group-onsemi 0:098463de4c5d 304 Verifier<T>::verify4(&cb, &Callback<T(T, T, T, T)>::call);
group-onsemi 0:098463de4c5d 305 Verifier<T>::verify4(&Callback<T(T, T, T, T)>::thunk, (void*)&cb);
group-onsemi 0:098463de4c5d 306 }
group-onsemi 0:098463de4c5d 307
group-onsemi 0:098463de4c5d 308 template <typename T>
group-onsemi 0:098463de4c5d 309 void test_dispatch5() {
group-onsemi 0:098463de4c5d 310 Thing<T> thing;
group-onsemi 0:098463de4c5d 311 Verifier<T>::verify5(static_func5<T>);
group-onsemi 0:098463de4c5d 312 Verifier<T>::verify5(&thing, &Thing<T>::member_func5);
group-onsemi 0:098463de4c5d 313 Verifier<T>::verify5((const Thing<T>*)&thing, &Thing<T>::const_member_func5);
group-onsemi 0:098463de4c5d 314 Verifier<T>::verify5((volatile Thing<T>*)&thing, &Thing<T>::volatile_member_func5);
group-onsemi 0:098463de4c5d 315 Verifier<T>::verify5((const volatile Thing<T>*)&thing, &Thing<T>::const_volatile_member_func5);
group-onsemi 0:098463de4c5d 316 Verifier<T>::verify5(&bound_func5<T>, &thing);
group-onsemi 0:098463de4c5d 317 Verifier<T>::verify5(&const_func5<T>, (const Thing<T>*)&thing);
group-onsemi 0:098463de4c5d 318 Verifier<T>::verify5(&volatile_func5<T>, (volatile Thing<T>*)&thing);
group-onsemi 0:098463de4c5d 319 Verifier<T>::verify5(&const_volatile_func5<T>, (const volatile Thing<T>*)&thing);
group-onsemi 0:098463de4c5d 320 Verifier<T>::verify5(callback(static_func5<T>));
group-onsemi 0:098463de4c5d 321
group-onsemi 0:098463de4c5d 322 Callback<T(T, T, T, T, T)> cb(static_func5);
group-onsemi 0:098463de4c5d 323 Verifier<T>::verify5(cb);
group-onsemi 0:098463de4c5d 324 cb = static_func5;
group-onsemi 0:098463de4c5d 325 Verifier<T>::verify5(cb);
group-onsemi 0:098463de4c5d 326 cb.attach(&bound_func5<T>, &thing);
group-onsemi 0:098463de4c5d 327 Verifier<T>::verify5(&cb, &Callback<T(T, T, T, T, T)>::call);
group-onsemi 0:098463de4c5d 328 Verifier<T>::verify5(&Callback<T(T, T, T, T, T)>::thunk, (void*)&cb);
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 callbacks with 0 uchars", test_dispatch0<unsigned char>),
group-onsemi 0:098463de4c5d 340 Case("Testing callbacks with 1 uchars", test_dispatch1<unsigned char>),
group-onsemi 0:098463de4c5d 341 Case("Testing callbacks with 2 uchars", test_dispatch2<unsigned char>),
group-onsemi 0:098463de4c5d 342 Case("Testing callbacks with 3 uchars", test_dispatch3<unsigned char>),
group-onsemi 0:098463de4c5d 343 Case("Testing callbacks with 4 uchars", test_dispatch4<unsigned char>),
group-onsemi 0:098463de4c5d 344 Case("Testing callbacks with 5 uchars", test_dispatch5<unsigned char>),
group-onsemi 0:098463de4c5d 345 };
group-onsemi 0:098463de4c5d 346
group-onsemi 0:098463de4c5d 347 Specification specification(test_setup, cases);
group-onsemi 0:098463de4c5d 348
group-onsemi 0:098463de4c5d 349 int main() {
group-onsemi 0:098463de4c5d 350 return !Harness::run(specification);
group-onsemi 0:098463de4c5d 351 }