From 242bdafa7596c97f01d414afa870bad73cb18df0 Mon Sep 17 00:00:00 2001 From: Alex Orlenko Date: Sat, 19 Jun 2021 00:03:09 +0100 Subject: [PATCH] More tests for arc/rc wrapped userdata --- tests/memory.rs | 6 +++--- tests/userdata.rs | 22 +++++++++++++++++++--- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/tests/memory.rs b/tests/memory.rs index d17bd66..45332f4 100644 --- a/tests/memory.rs +++ b/tests/memory.rs @@ -1,6 +1,6 @@ use std::sync::Arc; -use mlua::{GCMode, Lua, Result, UserData}; +use mlua::{Lua, Result, UserData}; #[cfg(any(feature = "lua54", feature = "lua53", feature = "lua52"))] use mlua::Error; @@ -39,7 +39,7 @@ fn test_gc_control() -> Result<()> { let globals = lua.globals(); #[cfg(feature = "lua54")] - assert_eq!(lua.gc_gen(0, 0), GCMode::Incremental); + assert_eq!(lua.gc_gen(0, 0), mlua::GCMode::Incremental); #[cfg(any(feature = "lua54", feature = "lua53", feature = "lua52"))] { @@ -63,7 +63,7 @@ fn test_gc_control() -> Result<()> { assert_eq!(Arc::strong_count(&rc), 1); #[cfg(feature = "lua54")] - assert_eq!(lua.gc_inc(0, 0, 0), GCMode::Generational); + assert_eq!(lua.gc_inc(0, 0, 0), mlua::GCMode::Generational); Ok(()) } diff --git a/tests/userdata.rs b/tests/userdata.rs index 1139c6a..3b54535 100644 --- a/tests/userdata.rs +++ b/tests/userdata.rs @@ -483,7 +483,8 @@ fn test_userdata_wrapped() -> Result<()> { #[cfg(not(feature = "send"))] { - globals.set("rc_refcell_ud", Rc::new(RefCell::new(MyUserData(1))))?; + let ud1 = Rc::new(RefCell::new(MyUserData(1))); + globals.set("rc_refcell_ud", ud1.clone())?; lua.load( r#" rc_refcell_ud.data = rc_refcell_ud.data + 1 @@ -491,9 +492,14 @@ fn test_userdata_wrapped() -> Result<()> { "#, ) .exec()?; + assert_eq!(ud1.borrow().0, 2); + globals.set("rc_refcell_ud", Nil)?; + lua.gc_collect()?; + assert_eq!(Rc::strong_count(&ud1), 1); } - globals.set("arc_mutex_ud", Arc::new(Mutex::new(MyUserData(2))))?; + let ud2 = Arc::new(Mutex::new(MyUserData(2))); + globals.set("arc_mutex_ud", ud2.clone())?; lua.load( r#" arc_mutex_ud.data = arc_mutex_ud.data + 1 @@ -501,8 +507,10 @@ fn test_userdata_wrapped() -> Result<()> { "#, ) .exec()?; + assert_eq!(ud2.lock().unwrap().0, 3); - globals.set("arc_rwlock_ud", Arc::new(RwLock::new(MyUserData(3))))?; + let ud3 = Arc::new(RwLock::new(MyUserData(3))); + globals.set("arc_rwlock_ud", ud3.clone())?; lua.load( r#" arc_rwlock_ud.data = arc_rwlock_ud.data + 1 @@ -510,6 +518,14 @@ fn test_userdata_wrapped() -> Result<()> { "#, ) .exec()?; + assert_eq!(ud3.read().unwrap().0, 4); + + // Test drop + globals.set("arc_mutex_ud", Nil)?; + globals.set("arc_rwlock_ud", Nil)?; + lua.gc_collect()?; + assert_eq!(Arc::strong_count(&ud2), 1); + assert_eq!(Arc::strong_count(&ud3), 1); Ok(()) }