#![allow(dead_code, unused_imports)]
use core::panic::{RefUnwindSafe, UnwindSafe};
use static_assertions::assert_not_impl_any;
use objc2::define_class;
use objc2::rc::Retained;
use objc2::runtime::{AnyObject, NSObject};
fn assert_unwindsafe<T: UnwindSafe + RefUnwindSafe>() {}
fn assert_auto_traits<T: Send + Sync + UnwindSafe + RefUnwindSafe>() {
assert_unwindsafe::<T>();
}
define_class!(
#[unsafe(super(NSObject))]
#[name = "SendSyncObject"]
struct SendSyncObject;
);
#[test]
fn test_generic_auto_traits() {
#[cfg(feature = "NSArray")]
assert_not_impl_any!(crate::NSArray<AnyObject>: Unpin);
#[cfg(feature = "NSArray")]
assert_not_impl_any!(crate::NSMutableArray<AnyObject>: Unpin);
#[cfg(feature = "NSDictionary")]
assert_not_impl_any!(crate::NSDictionary<AnyObject, AnyObject>: Unpin);
#[cfg(feature = "NSArray")]
assert_not_impl_any!(crate::NSArray<SendSyncObject>: Send, Sync);
#[cfg(feature = "NSArray")]
assert_not_impl_any!(crate::NSMutableArray<SendSyncObject>: Send, Sync);
#[cfg(feature = "NSDictionary")]
assert_not_impl_any!(crate::NSDictionary<SendSyncObject, SendSyncObject>: Send, Sync);
#[cfg(feature = "NSProcessInfo")]
{
use crate::NSProcessInfo;
#[cfg(feature = "NSDictionary")]
assert_not_impl_any!(crate::NSDictionary<NSProcessInfo, NSProcessInfo>: UnwindSafe, RefUnwindSafe);
#[cfg(feature = "NSSet")]
assert_not_impl_any!(crate::NSSet<NSProcessInfo>: UnwindSafe, RefUnwindSafe);
#[cfg(feature = "NSSet")]
assert_not_impl_any!(Retained<crate::NSSet<NSProcessInfo>>: UnwindSafe, RefUnwindSafe);
#[cfg(feature = "NSArray")]
assert_not_impl_any!(crate::NSMutableArray<NSProcessInfo>: UnwindSafe, RefUnwindSafe);
#[cfg(feature = "NSDictionary")]
assert_not_impl_any!(crate::NSMutableDictionary<NSProcessInfo, NSProcessInfo>: UnwindSafe, RefUnwindSafe);
#[cfg(feature = "NSSet")]
assert_not_impl_any!(crate::NSMutableSet<NSProcessInfo>: UnwindSafe, RefUnwindSafe);
}
}
#[test]
fn send_sync_unwindsafe() {
#[cfg(feature = "NSAttributedString")]
assert_unwindsafe::<crate::NSAttributedString>();
#[cfg(feature = "NSObjCRuntime")]
assert_auto_traits::<crate::NSComparisonResult>();
#[cfg(feature = "NSData")]
assert_unwindsafe::<crate::NSData>();
#[cfg(feature = "NSError")]
assert_auto_traits::<crate::NSError>();
#[cfg(feature = "NSException")]
assert_auto_traits::<crate::NSException>();
#[cfg(all(feature = "NSGeometry", feature = "objc2-core-foundation"))]
assert_auto_traits::<crate::NSPoint>();
#[cfg(all(feature = "NSGeometry", feature = "objc2-core-foundation"))]
assert_auto_traits::<crate::NSRect>();
#[cfg(all(feature = "NSGeometry", feature = "objc2-core-foundation"))]
assert_auto_traits::<crate::NSSize>();
#[cfg(feature = "NSAttributedString")]
assert_unwindsafe::<crate::NSMutableAttributedString>();
#[cfg(feature = "NSData")]
assert_unwindsafe::<crate::NSMutableData>();
#[cfg(feature = "NSString")]
assert_unwindsafe::<crate::NSMutableString>();
#[cfg(feature = "NSValue")]
assert_auto_traits::<crate::NSNumber>();
#[cfg(feature = "NSProcessInfo")]
assert_auto_traits::<crate::NSProcessInfo>();
#[cfg(feature = "NSRange")]
assert_auto_traits::<crate::NSRange>();
#[cfg(feature = "NSString")]
assert_unwindsafe::<crate::NSString>();
#[cfg(feature = "NSThread")]
assert_auto_traits::<crate::NSThread>();
#[cfg(feature = "NSUUID")]
assert_auto_traits::<crate::NSUUID>();
#[cfg(feature = "NSZone")]
assert_unwindsafe::<crate::NSZone>(); }