@@ -272,3 +272,43 @@ impl_for_set!(HashSet<T, S> where T: TraceImmutable, S: 'static);
272272impl_for_map ! ( IndexMap <K , V , S > where K : TraceImmutable , S : ' static ) ;
273273#[ cfg( feature = "indexmap" ) ]
274274impl_for_set ! ( IndexSet <T , S > where T : TraceImmutable , S : ' static ) ;
275+
276+ #[ cfg( test) ]
277+ mod test {
278+ use crate :: epsilon:: { EpsilonSystem , EpsilonCollectorId } ;
279+ use super :: * ;
280+ #[ test]
281+ #[ cfg( feature = "indexmap" ) ]
282+ fn indexmap ( ) {
283+ let system = EpsilonSystem :: leak ( ) ;
284+ let ctx = system. new_context ( ) ;
285+ const INPUT : & str = r##"{"foo": "bar", "eats": "turds"}"## ;
286+ let mut deser = serde_json:: Deserializer :: from_str ( INPUT ) ;
287+ let s = |s : & ' static str | String :: from ( s) ;
288+ assert_eq ! (
289+ <IndexMap <String , Gc <String , EpsilonCollectorId >> as GcDeserialize <EpsilonCollectorId >>:: deserialize_gc( & ctx, & mut deser) . unwrap( ) ,
290+ indexmap:: indexmap!(
291+ s( "foo" ) => ctx. alloc( s( "bar" ) ) ,
292+ s( "eats" ) => ctx. alloc( s( "turds" ) )
293+ )
294+ ) ;
295+ let mut deser = serde_json:: Deserializer :: from_str ( INPUT ) ;
296+ assert_eq ! (
297+ <IndexMap <String , Gc <String , EpsilonCollectorId >, fnv:: FnvBuildHasher > as GcDeserialize <EpsilonCollectorId >>:: deserialize_gc( & ctx, & mut deser) . unwrap( ) ,
298+ indexmap:: indexmap!(
299+ s( "foo" ) => ctx. alloc( s( "bar" ) ) ,
300+ s( "eats" ) => ctx. alloc( s( "turds" ) )
301+ )
302+ ) ;
303+ }
304+ #[ test]
305+ fn gc ( ) {
306+ let system = EpsilonSystem :: leak ( ) ;
307+ let ctx = system. new_context ( ) ;
308+ let mut deser = serde_json:: Deserializer :: from_str ( r#"128"# ) ;
309+ assert_eq ! (
310+ <Gc <i32 , EpsilonCollectorId > as GcDeserialize <EpsilonCollectorId >>:: deserialize_gc( & ctx, & mut deser) . unwrap( ) ,
311+ ctx. alloc( 128 )
312+ ) ;
313+ }
314+ }
0 commit comments