aboutsummaryrefslogtreecommitdiff
path: root/test/src/test_select.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-07-23 08:08:33 +0800
committer魏曹先生 <1992414357@qq.com>2026-07-23 14:01:45 +0800
commit68a652ed2f51d366bb8033497e6dfe545895410e (patch)
treed463833846248410733e196a0939c59cd67ca8a2 /test/src/test_select.rs
feat: scaffold crate structure and implement core macros
Add the project skeleton, LICENSE files, README, Makefile, doc examples, and the initial implementation of `#[func]`, `invoke!`, and `select!` procedural macros.
Diffstat (limited to 'test/src/test_select.rs')
-rw-r--r--test/src/test_select.rs92
1 files changed, 92 insertions, 0 deletions
diff --git a/test/src/test_select.rs b/test/src/test_select.rs
new file mode 100644
index 0000000..2cf3bfe
--- /dev/null
+++ b/test/src/test_select.rs
@@ -0,0 +1,92 @@
+#[cfg(not(feature = "metadata_async"))]
+#[test]
+fn test_select_explicit() {
+ let r = might_be_async::select! { "metadata_async" => { 1 } else ! => { 2 } };
+ assert_eq!(r, 2);
+}
+
+#[cfg(feature = "metadata_async")]
+#[test]
+fn test_select_explicit() {
+ let r = might_be_async::select! { "metadata_async" => { 1 } else ! => { 2 } };
+ assert_eq!(r, 1);
+}
+
+#[cfg(not(feature = "metadata_async"))]
+#[test]
+fn test_select_not() {
+ let r = might_be_async::select! { "metadata_async" => { 10 } else ! => { 20 } };
+ assert_eq!(r, 20);
+}
+
+#[cfg(feature = "metadata_async")]
+#[test]
+fn test_select_not() {
+ let r = might_be_async::select! { "metadata_async" => { 10 } else ! => { 20 } };
+ assert_eq!(r, 10);
+}
+
+#[cfg(not(feature = "metadata_async"))]
+#[test]
+fn test_select_not_first() {
+ let r = might_be_async::select! { ! => { 30 } else "metadata_async" => { 40 } };
+ assert_eq!(r, 30);
+}
+
+#[cfg(feature = "metadata_async")]
+#[test]
+fn test_select_not_first() {
+ let r = might_be_async::select! { ! => { 30 } else "metadata_async" => { 40 } };
+ assert_eq!(r, 40);
+}
+
+#[cfg(feature = "metadata_async")]
+#[test]
+fn test_select_both_explicit() {
+ let r = might_be_async::select! { "metadata_async" => { 100 } else "custom_ft" => { 200 } };
+ assert_eq!(r, 100);
+}
+
+#[cfg(not(feature = "metadata_async"))]
+#[test]
+fn test_select_implicit() {
+ let r = might_be_async::select! { { 1 + 2 } else { 3 + 4 } };
+ assert_eq!(r, 7);
+}
+
+#[cfg(feature = "metadata_async")]
+#[test]
+fn test_select_implicit() {
+ let r = futures::executor::block_on(async {
+ might_be_async::select! { { 1 + 2 } else { 3 + 4 } }
+ });
+ assert_eq!(r, 3);
+}
+
+#[cfg(not(feature = "metadata_async"))]
+#[test]
+fn test_select_mixed_explicit_first() {
+ let r = might_be_async::select! { "metadata_async" => { 100 } else { 200 } };
+ assert_eq!(r, 200);
+}
+
+#[cfg(feature = "metadata_async")]
+#[test]
+fn test_select_mixed_explicit_first() {
+ let r = might_be_async::select! { "metadata_async" => { 100 } else { 200 } };
+ assert_eq!(r, 100);
+}
+
+#[cfg(not(feature = "metadata_async"))]
+#[test]
+fn test_select_metadata_default() {
+ let r = might_be_async::select! { { 50 } else { 60 } };
+ assert_eq!(r, 60);
+}
+
+#[cfg(not(feature = "metadata_async"))]
+#[test]
+fn test_select_metadata_two_not() {
+ let r = might_be_async::select! { ! => { 70 } else ! => { 80 } };
+ assert_eq!(r, 80);
+}