@@ -6,13 +6,13 @@ extern crate gluon_vm;
66#[ macro_use]
77extern crate gluon_codegen;
88
9- use std:: sync:: Arc ;
9+ use std:: { collections :: BTreeMap , sync:: Arc } ;
1010
1111use futures:: prelude:: * ;
1212
1313use gluon:: {
1414 base:: types:: { Alias , ArcType , Type } ,
15- import:: { add_extern_module, Import } ,
15+ import:: { add_extern_module, add_extern_module_with_deps , Import } ,
1616 query:: Compilation ,
1717 vm:: {
1818 api:: {
@@ -368,6 +368,41 @@ fn use_rust_created_record_as_polymorphic() {
368368 assert_eq ! ( result, 1 ) ;
369369}
370370
371+ #[ test]
372+ fn return_btreemap ( ) {
373+ let _ = :: env_logger:: try_init ( ) ;
374+
375+ let vm = make_vm ( ) ;
376+
377+ add_extern_module_with_deps (
378+ & vm,
379+ "test" ,
380+ |vm| {
381+ ExternModule :: new (
382+ vm,
383+ primitive ! ( 1 , "test" , |( ) | {
384+ vec![ ( "a" . to_string( ) , 1 ) , ( "b" . to_string( ) , 2 ) ]
385+ . into_iter( )
386+ . collect:: <BTreeMap <_, _>>( )
387+ } ) ,
388+ )
389+ } ,
390+ vec ! [ "std.map" . into( ) , "std.json.de" . into( ) ] ,
391+ ) ;
392+
393+ vm. run_expr :: < ( ) > ( "" , "let _ = import! test in ()" )
394+ . unwrap_or_else ( |err| panic ! ( "{}" , err) ) ;
395+ let ( result, _) = vm
396+ . run_expr :: < BTreeMap < _ , _ > > ( "" , "(import! test) ()" )
397+ . unwrap_or_else ( |err| panic ! ( "{}" , err) ) ;
398+ assert_eq ! (
399+ result,
400+ vec![ ( "a" . to_string( ) , 1 ) , ( "b" . to_string( ) , 2 ) ]
401+ . into_iter( )
402+ . collect:: <BTreeMap <_, _>>( )
403+ ) ;
404+ }
405+
371406#[ test]
372407fn get_value_boxed_or_unboxed ( ) {
373408 let _ = :: env_logger:: try_init ( ) ;
0 commit comments