// run-pass // edition:2018 pub const A: usize = 0; pub mod foo { pub const B: usize = 1; pub mod bar { pub const C: usize = 2; pub enum E { V1(usize), V2(String), } pub fn test() -> String { format!("{} {} {}", crate::A, crate::foo::B, C) } pub fn test_use() -> String { use crate::A; use crate::foo::B; format!("{} {} {}", A, B, C) } pub fn test_enum() -> String { use E::*; match E::V1(10) { V1(i) => { format!("V1: {}", i) } V2(s) => { format!("V2: {}", s) } } } } pub fn test() -> String { format!("{} {} {}", crate::A, B, bar::C) } pub fn test_use() -> String { use crate::A; use bar::C; format!("{} {} {}", A, B, C) } pub fn test_enum() -> String { use bar::E::*; match bar::E::V1(10) { V1(i) => { format!("V1: {}", i) } V2(s) => { format!("V2: {}", s) } } } } pub fn test() -> String { format!("{} {} {}", A, foo::B, foo::bar::C) } pub fn test_use() -> String { use foo::B; use foo::bar::C; format!("{} {} {}", A, B, C) } pub fn test_enum() -> String { use foo::bar::E::*; match foo::bar::E::V1(10) { V1(i) => { format!("V1: {}", i) } V2(s) => { format!("V2: {}", s) } } } fn main() { let output = [ test(), foo::test(), foo::bar::test(), test_use(), foo::test_use(), foo::bar::test_use(), test_enum(), foo::test_enum(), foo::bar::test_enum(), ].join("\n"); assert_eq!(output, "\ 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 V1: 10 V1: 10 V1: 10"); }