1#[macro_export]
28#[cfg(feature = "alloc")]
29#[cfg_attr(docsrs, doc(cfg(any(feature = "std", feature = "alloc"))))]
30#[allow(edition_2024_expr_fragment_specifier)]
31macro_rules! vec {
32 () => ($crate::__::alloc::vec::Vec::new());
33 ($($item:expr),+ $(,)?) => ($crate::__::alloc::vec![$(::core::convert::Into::into($item)),+ ]);
34}
35
36#[macro_export]
68#[allow(edition_2024_expr_fragment_specifier)]
69macro_rules! arr {
70 () => ([]);
71 ($($item:expr),+ $(,)?) => ([$(::core::convert::Into::into($item)),+]);
72}
73
74#[cfg(test)]
75mod tests {
76 #![allow(clippy::indexing_slicing)]
78
79 #[cfg(feature = "alloc")]
80 use crate::__::alloc::{string::String, vec::Vec};
81 use core::num::NonZeroU8;
82
83 #[cfg(feature = "alloc")]
84 #[test]
85 fn arr_of_strings() {
86 let actual: [String; 3] = crate::arr!["foo", "bar", "baz"];
87 assert_eq!(actual, ["foo", "bar", "baz"]);
88
89 let actual: [String; 0] = crate::arr![];
90 assert!(actual.is_empty());
91 }
92
93 #[test]
94 fn arr_of_numbers() {
95 let actual: [u8; 2] = crate::arr![NonZeroU8::new(1).unwrap(), NonZeroU8::new(2).unwrap()];
96 assert_eq!(actual, [1, 2]);
97
98 let actual: [u8; 0] = crate::arr![];
99 assert!(actual.is_empty());
100 }
101
102 #[cfg(feature = "alloc")]
103 #[test]
104 fn vec_smoke() {
105 let actual: Vec<String> = crate::vec!["foo", "bar", "baz"];
106 assert_eq!(actual, ["foo", "bar", "baz"]);
107
108 let actual: Vec<String> = crate::vec![];
109 assert!(actual.is_empty());
110 }
111
112 #[cfg(feature = "std")]
113 #[test]
114 fn map_smoke() {
115 use std::collections::{BTreeMap, HashMap};
116
117 let hash_strings: HashMap<String, String> = crate::map! {
118 "Hello": "World",
119 "Goodbye": "Mars",
120 };
121
122 assert_eq!(hash_strings["Hello"], "World");
123 assert_eq!(hash_strings["Goodbye"], "Mars");
124
125 let tree_strings: BTreeMap<String, String> = crate::map! {
126 "Hello": "World",
127 "Goodbye": "Mars",
128 };
129
130 assert_eq!(tree_strings["Hello"], "World");
131 assert_eq!(tree_strings["Goodbye"], "Mars");
132 }
133
134 #[cfg(feature = "std")]
135 #[test]
136 fn set_smoke() {
137 use std::collections::BTreeSet;
138 use std::collections::HashSet;
139
140 let hash_strings: HashSet<String> = crate::set!["Hello", "World", "Goodbye", "Mars"];
141
142 assert!(hash_strings.contains("Hello"));
143 assert!(hash_strings.contains("World"));
144 assert!(hash_strings.contains("Goodbye"));
145 assert!(hash_strings.contains("Mars"));
146
147 let tree_strings: BTreeSet<String> = crate::set!["Hello", "World", "Goodbye", "Mars"];
148
149 assert!(tree_strings.contains("Hello"));
150 assert!(tree_strings.contains("World"));
151 assert!(tree_strings.contains("Goodbye"));
152 assert!(tree_strings.contains("Mars"));
153 }
154}