aboutsummaryrefslogtreecommitdiff
path: root/tests/cfail
diff options
context:
space:
mode:
authorJorge Aparicio <japaricious@gmail.com>2017-04-12 16:05:48 -0500
committerJorge Aparicio <japaricious@gmail.com>2017-04-12 16:05:48 -0500
commitcc6c1ad3f384ac4021d55236c5e576eb288028dc (patch)
tree158971f5daa5f365c8def07bd0a8838eab5cd583 /tests/cfail
parent26f8ca6969165195c10b8749545d027e148255f7 (diff)
add cfail tests for the tasks! macro
Diffstat (limited to 'tests/cfail')
-rw-r--r--tests/cfail/tasks-p0.rs54
-rw-r--r--tests/cfail/tasks-same-handler.rs58
-rw-r--r--tests/cfail/tasks-wrong-idle.rs55
-rw-r--r--tests/cfail/tasks-wrong-init.rs54
-rw-r--r--tests/cfail/tasks-wrong-priority.rs54
-rw-r--r--tests/cfail/tasks-wrong-task.rs54
6 files changed, 329 insertions, 0 deletions
diff --git a/tests/cfail/tasks-p0.rs b/tests/cfail/tasks-p0.rs
new file mode 100644
index 0000000..3813963
--- /dev/null
+++ b/tests/cfail/tasks-p0.rs
@@ -0,0 +1,54 @@
+// error-pattern: no associated item named `hw`
+
+#![feature(used)]
+
+extern crate core;
+extern crate cortex_m;
+#[macro_use]
+extern crate cortex_m_srp;
+
+use cortex_m_srp::{C16, P0, P1};
+use device::interrupt::Exti0;
+
+/// Tasks can't have priority 0. Only idle has priority 0
+tasks!(device, {
+ j1: (Exti0, P0),
+});
+
+fn init(_: C16) {}
+
+fn idle(_: P0) {}
+
+fn j1(_task: Exti0, _prio: P1) {}
+
+mod device {
+ pub mod interrupt {
+ use cortex_m::interrupt::Nr;
+
+ extern "C" fn default_handler<T>(_: T) {}
+
+ pub struct Handlers {
+ pub Exti0: extern "C" fn(Exti0),
+ pub Exti1: extern "C" fn(Exti1),
+ }
+
+ pub struct Exti0;
+ pub struct Exti1;
+
+ pub enum Interrupt {
+ Exti0,
+ Exti1,
+ }
+
+ unsafe impl Nr for Interrupt {
+ fn nr(&self) -> u8 {
+ 0
+ }
+ }
+
+ pub const DEFAULT_HANDLERS: Handlers = Handlers {
+ Exti0: default_handler,
+ Exti1: default_handler,
+ };
+ }
+}
diff --git a/tests/cfail/tasks-same-handler.rs b/tests/cfail/tasks-same-handler.rs
new file mode 100644
index 0000000..345e65c
--- /dev/null
+++ b/tests/cfail/tasks-same-handler.rs
@@ -0,0 +1,58 @@
+// error-pattern: specified more than once
+
+#![feature(used)]
+
+extern crate core;
+extern crate cortex_m;
+#[macro_use]
+extern crate cortex_m_srp;
+
+use cortex_m_srp::{C16, P0, P1, P2};
+use device::interrupt::Exti0;
+
+// WRONG: Two tasks mapped to the same interrupt handler
+tasks!(device, {
+ j1: (Exti0, P1),
+ j2: (Exti0, P2),
+});
+
+fn init(_: C16) {}
+
+fn idle(_: P0) {}
+
+fn j1(_task: Exti0, _prio: P1) {}
+
+fn j2(_task: Exti0, _prio: P1) {}
+
+
+mod device {
+ pub mod interrupt {
+ use cortex_m::interrupt::Nr;
+
+ extern "C" fn default_handler<T>(_: T) {}
+
+ pub struct Handlers {
+ pub Exti0: extern "C" fn(Exti0),
+ pub Exti1: extern "C" fn(Exti1),
+ }
+
+ pub struct Exti0;
+ pub struct Exti1;
+
+ pub enum Interrupt {
+ Exti0,
+ Exti1,
+ }
+
+ unsafe impl Nr for Interrupt {
+ fn nr(&self) -> u8 {
+ 0
+ }
+ }
+
+ pub const DEFAULT_HANDLERS: Handlers = Handlers {
+ Exti0: default_handler,
+ Exti1: default_handler,
+ };
+ }
+}
diff --git a/tests/cfail/tasks-wrong-idle.rs b/tests/cfail/tasks-wrong-idle.rs
new file mode 100644
index 0000000..8d6ef4b
--- /dev/null
+++ b/tests/cfail/tasks-wrong-idle.rs
@@ -0,0 +1,55 @@
+// error-pattern: mismatched types
+
+#![feature(used)]
+
+extern crate core;
+extern crate cortex_m;
+#[macro_use]
+extern crate cortex_m_srp;
+
+use cortex_m_srp::{C16, P0, P1};
+use device::interrupt::Exti0;
+
+/// Tasks can't have priority 0. Only idle has priority 0
+tasks!(device, {
+ j1: (Exti0, P1),
+});
+
+fn init(_: C16) {}
+
+// WRONG. `idle` must have signature `fn(P1)`
+fn idle(_: P1) {}
+
+fn j1(_task: Exti0, _prio: P1) {}
+
+mod device {
+ pub mod interrupt {
+ use cortex_m::interrupt::Nr;
+
+ extern "C" fn default_handler<T>(_: T) {}
+
+ pub struct Handlers {
+ pub Exti0: extern "C" fn(Exti0),
+ pub Exti1: extern "C" fn(Exti1),
+ }
+
+ pub struct Exti0;
+ pub struct Exti1;
+
+ pub enum Interrupt {
+ Exti0,
+ Exti1,
+ }
+
+ unsafe impl Nr for Interrupt {
+ fn nr(&self) -> u8 {
+ 0
+ }
+ }
+
+ pub const DEFAULT_HANDLERS: Handlers = Handlers {
+ Exti0: default_handler,
+ Exti1: default_handler,
+ };
+ }
+}
diff --git a/tests/cfail/tasks-wrong-init.rs b/tests/cfail/tasks-wrong-init.rs
new file mode 100644
index 0000000..73c4722
--- /dev/null
+++ b/tests/cfail/tasks-wrong-init.rs
@@ -0,0 +1,54 @@
+// error-pattern: mismatched types
+
+#![feature(used)]
+
+extern crate core;
+extern crate cortex_m;
+#[macro_use]
+extern crate cortex_m_srp;
+
+use cortex_m_srp::{C1, P0, P1};
+use device::interrupt::Exti0;
+
+tasks!(device, {
+ j1: (Exti0, P1),
+});
+
+// WRONG. `init` must have signature `fn(C16)`
+fn init(_: C1) {}
+
+fn idle(_: P0) {}
+
+fn j1(_task: Exti0, _prio: P1) {}
+
+mod device {
+ pub mod interrupt {
+ use cortex_m::interrupt::Nr;
+
+ extern "C" fn default_handler<T>(_: T) {}
+
+ pub struct Handlers {
+ pub Exti0: extern "C" fn(Exti0),
+ pub Exti1: extern "C" fn(Exti1),
+ }
+
+ pub struct Exti0;
+ pub struct Exti1;
+
+ pub enum Interrupt {
+ Exti0,
+ Exti1,
+ }
+
+ unsafe impl Nr for Interrupt {
+ fn nr(&self) -> u8 {
+ 0
+ }
+ }
+
+ pub const DEFAULT_HANDLERS: Handlers = Handlers {
+ Exti0: default_handler,
+ Exti1: default_handler,
+ };
+ }
+}
diff --git a/tests/cfail/tasks-wrong-priority.rs b/tests/cfail/tasks-wrong-priority.rs
new file mode 100644
index 0000000..741a96a
--- /dev/null
+++ b/tests/cfail/tasks-wrong-priority.rs
@@ -0,0 +1,54 @@
+// error-pattern: mismatched types
+
+#![feature(used)]
+
+extern crate core;
+extern crate cortex_m;
+#[macro_use]
+extern crate cortex_m_srp;
+
+use cortex_m_srp::{C16, P0, P1, P2};
+use device::interrupt::Exti1;
+
+tasks!(device, {
+ j1: (Exti0, P1),
+});
+
+fn init(_: C16) {}
+
+fn idle(_: P0) {}
+
+// Wrong priority token. Declared P1, got P2
+fn j1(_task: Exti1, _prio: P1) {}
+
+mod device {
+ pub mod interrupt {
+ use cortex_m::interrupt::Nr;
+
+ extern "C" fn default_handler<T>(_: T) {}
+
+ pub struct Handlers {
+ pub Exti0: extern "C" fn(Exti0),
+ pub Exti1: extern "C" fn(Exti1),
+ }
+
+ pub struct Exti0;
+ pub struct Exti1;
+
+ pub enum Interrupt {
+ Exti0,
+ Exti1,
+ }
+
+ unsafe impl Nr for Interrupt {
+ fn nr(&self) -> u8 {
+ 0
+ }
+ }
+
+ pub const DEFAULT_HANDLERS: Handlers = Handlers {
+ Exti0: default_handler,
+ Exti1: default_handler,
+ };
+ }
+}
diff --git a/tests/cfail/tasks-wrong-task.rs b/tests/cfail/tasks-wrong-task.rs
new file mode 100644
index 0000000..ee69a8b
--- /dev/null
+++ b/tests/cfail/tasks-wrong-task.rs
@@ -0,0 +1,54 @@
+// error-pattern: mismatched types
+
+#![feature(used)]
+
+extern crate core;
+extern crate cortex_m;
+#[macro_use]
+extern crate cortex_m_srp;
+
+use cortex_m_srp::{C16, P0, P1};
+use device::interrupt::Exti1;
+
+tasks!(device, {
+ j1: (Exti0, P1),
+});
+
+fn init(_: C16) {}
+
+fn idle(_: P0) {}
+
+// Wrong task token. Declared Exti0, got Exti1
+fn j1(_task: Exti1, _prio: P1) {}
+
+mod device {
+ pub mod interrupt {
+ use cortex_m::interrupt::Nr;
+
+ extern "C" fn default_handler<T>(_: T) {}
+
+ pub struct Handlers {
+ pub Exti0: extern "C" fn(Exti0),
+ pub Exti1: extern "C" fn(Exti1),
+ }
+
+ pub struct Exti0;
+ pub struct Exti1;
+
+ pub enum Interrupt {
+ Exti0,
+ Exti1,
+ }
+
+ unsafe impl Nr for Interrupt {
+ fn nr(&self) -> u8 {
+ 0
+ }
+ }
+
+ pub const DEFAULT_HANDLERS: Handlers = Handlers {
+ Exti0: default_handler,
+ Exti1: default_handler,
+ };
+ }
+}