@@ -1444,4 +1444,64 @@ mod tests {
1444
1444
assert ! ( world. contains_resource:: <W <i32 >>( ) ) ;
1445
1445
assert ! ( world. contains_resource:: <W <f64 >>( ) ) ;
1446
1446
}
1447
+
1448
+ mod non_send {
1449
+ use super :: * ;
1450
+
1451
+ #[ allow( dead_code) ]
1452
+ struct MyNonSend ( * const ( ) ) ;
1453
+
1454
+ impl Default for MyNonSend {
1455
+ fn default ( ) -> Self {
1456
+ MyNonSend ( std:: ptr:: null ( ) )
1457
+ }
1458
+ }
1459
+
1460
+ #[ test]
1461
+ fn init ( ) {
1462
+ let mut world = World :: default ( ) ;
1463
+ let mut queue = CommandQueue :: default ( ) ;
1464
+
1465
+ {
1466
+ let mut commands = Commands :: new ( & mut queue, & world) ;
1467
+ commands. init_non_send_resource :: < MyNonSend > ( ) ;
1468
+ }
1469
+
1470
+ queue. apply ( & mut world) ;
1471
+
1472
+ assert ! ( world. contains_non_send:: <MyNonSend >( ) ) ;
1473
+ }
1474
+
1475
+ #[ test]
1476
+ fn insert ( ) {
1477
+ let mut world = World :: default ( ) ;
1478
+ let mut queue = CommandQueue :: default ( ) ;
1479
+
1480
+ {
1481
+ let mut commands = Commands :: new ( & mut queue, & world) ;
1482
+ commands. insert_non_send_resource ( || MyNonSend ( std:: ptr:: from_ref ( & ( ) ) ) ) ;
1483
+ }
1484
+
1485
+ queue. apply ( & mut world) ;
1486
+
1487
+ assert ! ( world. contains_non_send:: <MyNonSend >( ) ) ;
1488
+ }
1489
+
1490
+ #[ test]
1491
+ fn remove ( ) {
1492
+ let mut world = World :: default ( ) ;
1493
+ let mut queue = CommandQueue :: default ( ) ;
1494
+
1495
+ world. init_non_send_resource :: < MyNonSend > ( ) ;
1496
+
1497
+ {
1498
+ let mut commands = Commands :: new ( & mut queue, & world) ;
1499
+ commands. remove_non_send_resource :: < MyNonSend > ( ) ;
1500
+ }
1501
+
1502
+ queue. apply ( & mut world) ;
1503
+
1504
+ assert ! ( !world. contains_non_send:: <MyNonSend >( ) ) ;
1505
+ }
1506
+ }
1447
1507
}
0 commit comments