aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/cfail/cfg-resources.rs64
-rw-r--r--tests/cfail/cfg-static.rs57
-rw-r--r--tests/cpass/cfg.rs53
3 files changed, 174 insertions, 0 deletions
diff --git a/tests/cfail/cfg-resources.rs b/tests/cfail/cfg-resources.rs
new file mode 100644
index 0000000..dee1485
--- /dev/null
+++ b/tests/cfail/cfg-resources.rs
@@ -0,0 +1,64 @@
+#![no_main]
+#![no_std]
+
+extern crate lm3s6965;
+extern crate panic_halt;
+extern crate rtfm;
+
+use rtfm::app;
+
+#[app(device = lm3s6965)]
+const APP: () = {
+ #[cfg(never)]
+ static mut O1: u32 = 0; // init
+ #[cfg(never)]
+ static mut O2: u32 = 0; // idle
+ #[cfg(never)]
+ static mut O3: u32 = 0; // EXTI0
+ #[cfg(never)]
+ static O4: u32 = 0; // idle
+ #[cfg(never)]
+ static O5: u32 = 0; // EXTI1
+ #[cfg(never)]
+ static O6: u32 = 0; // init
+
+ #[cfg(never)]
+ static mut S1: u32 = 0; // idle & EXTI0
+ #[cfg(never)]
+ static mut S2: u32 = 0; // EXTI0 & EXTI1
+ #[cfg(never)]
+ static S3: u32 = 0;
+
+ #[init(resources = [O1, O4, O5, O6, S3])]
+ fn init() {
+ resources.O1; //~ ERROR no field `O1`
+ resources.O4; //~ ERROR no field `O4`
+ resources.O5; //~ ERROR no field `O5`
+ resources.O6; //~ ERROR no field `O6`
+ resources.S3; //~ ERROR no field `S3`
+ }
+
+ #[idle(resources = [O2, O4, S1, S3])]
+ fn idle() -> ! {
+ resources.O2; //~ ERROR no field `O2`
+ resources.O4; //~ ERROR no field `O4`
+ resources.S1; //~ ERROR no field `S1`
+ resources.S3; //~ ERROR no field `S3`
+
+ loop {}
+ }
+
+ #[interrupt(resources = [O3, S1, S2, S3])]
+ fn UART0() {
+ resources.O3; //~ ERROR no field `O3`
+ resources.S1; //~ ERROR no field `S1`
+ resources.S2; //~ ERROR no field `S2`
+ resources.S3; //~ ERROR no field `S3`
+ }
+
+ #[interrupt(resources = [S2, O5])]
+ fn UART1() {
+ resources.S2; //~ ERROR no field `S2`
+ resources.O5; //~ ERROR no field `O5`
+ }
+};
diff --git a/tests/cfail/cfg-static.rs b/tests/cfail/cfg-static.rs
new file mode 100644
index 0000000..0d27e53
--- /dev/null
+++ b/tests/cfail/cfg-static.rs
@@ -0,0 +1,57 @@
+#![no_main]
+#![no_std]
+
+extern crate lm3s6965;
+extern crate panic_halt;
+extern crate rtfm;
+
+use rtfm::app;
+
+#[app(device = lm3s6965)]
+const APP: () = {
+ #[init]
+ fn init() {
+ #[cfg(never)]
+ static mut FOO: u32 = 0;
+
+ FOO; //~ ERROR cannot find value `FOO` in this scope
+ }
+
+ #[idle]
+ fn idle() -> ! {
+ #[cfg(never)]
+ static mut FOO: u32 = 0;
+
+ FOO; //~ ERROR cannot find value `FOO` in this scope
+
+ loop {}
+ }
+
+ #[exception]
+ fn SVCall() {
+ #[cfg(never)]
+ static mut FOO: u32 = 0;
+
+ FOO; //~ ERROR cannot find value `FOO` in this scope
+ }
+
+ #[interrupt]
+ fn UART0() {
+ #[cfg(never)]
+ static mut FOO: u32 = 0;
+
+ FOO; //~ ERROR cannot find value `FOO` in this scope
+ }
+
+ #[task]
+ fn foo() {
+ #[cfg(never)]
+ static mut FOO: u32 = 0;
+
+ FOO; //~ ERROR cannot find value `FOO` in this scope
+ }
+
+ extern "C" {
+ fn UART1();
+ }
+};
diff --git a/tests/cpass/cfg.rs b/tests/cpass/cfg.rs
new file mode 100644
index 0000000..c91ab60
--- /dev/null
+++ b/tests/cpass/cfg.rs
@@ -0,0 +1,53 @@
+//! Compile-pass test that checks that `#[cfg]` attributes are respected
+
+#![deny(unsafe_code)]
+#![deny(warnings)]
+#![no_main]
+#![no_std]
+
+extern crate lm3s6965;
+extern crate panic_semihosting;
+extern crate rtfm;
+
+use rtfm::app;
+
+#[app(device = lm3s6965)]
+const APP: () = {
+ #[cfg(never)]
+ static mut FOO: u32 = 0;
+
+ #[init]
+ fn init() {
+ #[cfg(never)]
+ static mut BAR: u32 = 0;
+ }
+
+ #[idle]
+ fn idle() -> ! {
+ #[cfg(never)]
+ static mut BAR: u32 = 0;
+
+ loop {}
+ }
+
+ #[task(resources = [FOO], schedule = [quux], spawn = [quux])]
+ fn foo() {
+ #[cfg(never)]
+ static mut BAR: u32 = 0;
+ }
+
+ #[task(priority = 3, resources = [FOO], schedule = [quux], spawn = [quux])]
+ fn bar() {
+ #[cfg(never)]
+ static mut BAR: u32 = 0;
+ }
+
+ #[cfg(never)]
+ #[task]
+ fn quux() {}
+
+ extern "C" {
+ fn UART0();
+ fn UART1();
+ }
+};