aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorbors[bot] <bors[bot]@users.noreply.github.com>2018-12-16 18:18:17 +0000
committerbors[bot] <bors[bot]@users.noreply.github.com>2018-12-16 18:18:17 +0000
commitc2fbb2848851e32b78e79ff9e919538b7d5ab8a0 (patch)
treecadf6359329573a79e937afcef2972f2cf01f6b4 /tests
parent5c458fc115393b93b158b7f6770bc81596d97977 (diff)
parentd35f5bc0b0453c2e98b8398d36bd2ba553edce45 (diff)
Merge #114
114: properly handle conditional compilation r=japaric a=japaric of resources and tasks Co-authored-by: Jorge Aparicio <jorge@japaric.io>
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();
+ }
+};