From 87630e1d692e1ab54603021baeab1a5026f6d787 Mon Sep 17 00:00:00 2001 From: Richard Feldman Date: Sun, 2 Aug 2020 21:48:37 -0400 Subject: [PATCH] Fix test_uniq_load --- compiler/arena_pool/tests/test_arena_pool.rs | 6 +- compiler/load/tests/test_load.rs | 8 +- compiler/load/tests/test_uniq_load.rs | 285 +++++++++---------- 3 files changed, 139 insertions(+), 160 deletions(-) diff --git a/compiler/arena_pool/tests/test_arena_pool.rs b/compiler/arena_pool/tests/test_arena_pool.rs index 537e0dbf73..c193b3a4ea 100644 --- a/compiler/arena_pool/tests/test_arena_pool.rs +++ b/compiler/arena_pool/tests/test_arena_pool.rs @@ -1,11 +1,11 @@ -#[macro_use] -extern crate pretty_assertions; +// #[macro_use] +// extern crate pretty_assertions; extern crate arena_pool; #[cfg(test)] mod test_arena_pool { - use arena_pool::pool::{Arena, ArenaIter, ArenaPool, ArenaRef}; + use arena_pool::pool::{ArenaIter, ArenaPool}; #[test] fn empty_pool() { diff --git a/compiler/load/tests/test_load.rs b/compiler/load/tests/test_load.rs index 1ad8a9a3cc..e98f05dfdc 100644 --- a/compiler/load/tests/test_load.rs +++ b/compiler/load/tests/test_load.rs @@ -35,9 +35,9 @@ mod test_load { let src_dir = fixtures_dir().join(dir_name); let filename = src_dir.join(format!("{}.roc", module_name)); let loaded = load( - src_dir, + filename, &roc_builtins::std::standard_stdlib(), - filename.as_path(), + src_dir.as_path(), subs_by_module, ); let loaded_module = loaded.expect("Test module failed to load"); @@ -129,9 +129,9 @@ mod test_load { let src_dir = fixtures_dir().join("interface_with_deps"); let filename = src_dir.join("Primary.roc"); let loaded = load( - src_dir, + filename, &roc_builtins::std::standard_stdlib(), - filename.as_path(), + src_dir.as_path(), subs_by_module, ); diff --git a/compiler/load/tests/test_uniq_load.rs b/compiler/load/tests/test_uniq_load.rs index 383845d2f0..4ee214f80f 100644 --- a/compiler/load/tests/test_uniq_load.rs +++ b/compiler/load/tests/test_uniq_load.rs @@ -13,7 +13,7 @@ mod helpers; #[cfg(test)] mod test_uniq_load { - use crate::helpers::{fixtures_dir, test_async}; + use crate::helpers::fixtures_dir; use inlinable_string::InlinableString; use roc_builtins::unique; use roc_can::def::Declaration::*; @@ -28,14 +28,19 @@ mod test_uniq_load { // HELPERS - async fn load_fixture( + fn load_fixture( dir_name: &str, module_name: &str, subs_by_module: SubsByModule, ) -> LoadedModule { let src_dir = fixtures_dir().join(dir_name); let filename = src_dir.join(format!("{}.roc", module_name)); - let loaded = load(&unique::uniq_stdlib(), src_dir, filename, subs_by_module).await; + let loaded = load( + filename, + &unique::uniq_stdlib(), + src_dir.as_path(), + subs_by_module, + ); let loaded_module = loaded.expect("Test module failed to load"); assert_eq!(loaded_module.can_problems, Vec::new()); @@ -124,205 +129,179 @@ mod test_uniq_load { let subs_by_module = MutMap::default(); let src_dir = fixtures_dir().join("interface_with_deps"); let filename = src_dir.join("Primary.roc"); + let loaded = load( + filename, + &roc_builtins::std::standard_stdlib(), + src_dir.as_path(), + subs_by_module, + ); - test_async(async { - let loaded = load( - &roc_builtins::std::standard_stdlib(), - src_dir, - filename, - subs_by_module, - ) - .await; + let mut loaded_module = loaded.expect("Test module failed to load"); - let mut loaded_module = loaded.expect("Test module failed to load"); + assert_eq!(loaded_module.can_problems, Vec::new()); + assert_eq!(loaded_module.type_problems, Vec::new()); - assert_eq!(loaded_module.can_problems, Vec::new()); - assert_eq!(loaded_module.type_problems, Vec::new()); + let def_count: usize = loaded_module + .declarations_by_id + .remove(&loaded_module.module_id) + .unwrap() + .into_iter() + .map(|decl| decl.def_count()) + .sum(); - let def_count: usize = loaded_module - .declarations_by_id - .remove(&loaded_module.module_id) - .unwrap() - .into_iter() - .map(|decl| decl.def_count()) - .sum(); + let expected_name = loaded_module + .interns + .module_ids + .get_name(loaded_module.module_id) + .expect("Test ModuleID not found in module_ids"); - let expected_name = loaded_module - .interns - .module_ids - .get_name(loaded_module.module_id) - .expect("Test ModuleID not found in module_ids"); - - assert_eq!(expected_name, &InlinableString::from("Primary")); - assert_eq!(def_count, 10); - }); + assert_eq!(expected_name, &InlinableString::from("Primary")); + assert_eq!(def_count, 10); } #[test] fn load_unit() { - test_async(async { - let subs_by_module = MutMap::default(); - let loaded_module = load_fixture("no_deps", "Unit", subs_by_module).await; + let subs_by_module = MutMap::default(); + let loaded_module = load_fixture("no_deps", "Unit", subs_by_module); - expect_types( - loaded_module, - hashmap! { - "unit" => "Attr * Unit", - }, - ); - }); + expect_types( + loaded_module, + hashmap! { + "unit" => "Attr * Unit", + }, + ); } #[test] fn import_alias() { - test_async(async { - let subs_by_module = MutMap::default(); - let loaded_module = - load_fixture("interface_with_deps", "ImportAlias", subs_by_module).await; + let subs_by_module = MutMap::default(); + let loaded_module = load_fixture("interface_with_deps", "ImportAlias", subs_by_module); - expect_types( - loaded_module, - hashmap! { - "unit" => "Attr * Dep1.Unit", - }, - ); - }); + expect_types( + loaded_module, + hashmap! { + "unit" => "Attr * Dep1.Unit", + }, + ); } #[test] fn load_and_typecheck() { - test_async(async { - let subs_by_module = MutMap::default(); - let loaded_module = - load_fixture("interface_with_deps", "WithBuiltins", subs_by_module).await; + let subs_by_module = MutMap::default(); + let loaded_module = load_fixture("interface_with_deps", "WithBuiltins", subs_by_module); - expect_types( - loaded_module, - hashmap! { - "floatTest" => "Attr Shared Float", - "divisionFn" => "Attr Shared (Attr * Float, Attr * Float -> Attr * (Result (Attr * Float) (Attr * [ DivByZero ]*)))", - "divisionTest" => "Attr * (Result (Attr * Float) (Attr * [ DivByZero ]*))", - "intTest" => "Attr * Int", - "x" => "Attr * Float", - "constantNum" => "Attr * (Num (Attr * *))", - "divDep1ByDep2" => "Attr * (Result (Attr * Float) (Attr * [ DivByZero ]*))", - "fromDep2" => "Attr * Float", - }, - ); - }); + expect_types( + loaded_module, + hashmap! { + "floatTest" => "Attr Shared Float", + "divisionFn" => "Attr Shared (Attr * Float, Attr * Float -> Attr * (Result (Attr * Float) (Attr * [ DivByZero ]*)))", + "divisionTest" => "Attr * (Result (Attr * Float) (Attr * [ DivByZero ]*))", + "intTest" => "Attr * Int", + "x" => "Attr * Float", + "constantNum" => "Attr * (Num (Attr * *))", + "divDep1ByDep2" => "Attr * (Result (Attr * Float) (Attr * [ DivByZero ]*))", + "fromDep2" => "Attr * Float", + }, + ); } #[test] fn load_astar() { - test_async(async { - let subs_by_module = MutMap::default(); - let loaded_module = load_fixture("interface_with_deps", "AStar", subs_by_module).await; + let subs_by_module = MutMap::default(); + let loaded_module = load_fixture("interface_with_deps", "AStar", subs_by_module); - expect_types( - loaded_module, - hashmap! { - "findPath" => "Attr * (Attr * { costFunction : (Attr Shared (Attr Shared position, Attr Shared position -> Attr * Float)), end : (Attr Shared position), moveFunction : (Attr Shared (Attr Shared position -> Attr * (Set (Attr * position)))), start : (Attr Shared position) } -> Attr * (Result (Attr * (List (Attr Shared position))) (Attr * [ KeyNotFound ]*)))", - "initialModel" => "Attr * (Attr Shared position -> Attr * (Model (Attr Shared position)))", - "reconstructPath" => "Attr Shared (Attr Shared (Map (Attr * position) (Attr Shared position)), Attr Shared position -> Attr * (List (Attr Shared position)))", - "updateCost" => "Attr * (Attr Shared position, Attr Shared position, Attr Shared (Model (Attr Shared position)) -> Attr Shared (Model (Attr Shared position)))", - "cheapestOpen" => "Attr * (Attr * (Attr Shared position -> Attr * Float), Attr (* | a | b | c) (Model (Attr Shared position)) -> Attr * (Result (Attr Shared position) (Attr * [ KeyNotFound ]*)))", - "astar" => "Attr Shared (Attr Shared (Attr Shared position, Attr Shared position -> Attr * Float), Attr Shared (Attr Shared position -> Attr * (Set (Attr * position))), Attr Shared position, Attr Shared (Model (Attr Shared position)) -> Attr * [ Err (Attr * [ KeyNotFound ]*), Ok (Attr * (List (Attr Shared position))) ]*)", - }, - ); - }); + expect_types( + loaded_module, + hashmap! { + "findPath" => "Attr * (Attr * { costFunction : (Attr Shared (Attr Shared position, Attr Shared position -> Attr * Float)), end : (Attr Shared position), moveFunction : (Attr Shared (Attr Shared position -> Attr * (Set (Attr * position)))), start : (Attr Shared position) } -> Attr * (Result (Attr * (List (Attr Shared position))) (Attr * [ KeyNotFound ]*)))", + "initialModel" => "Attr * (Attr Shared position -> Attr * (Model (Attr Shared position)))", + "reconstructPath" => "Attr Shared (Attr Shared (Map (Attr * position) (Attr Shared position)), Attr Shared position -> Attr * (List (Attr Shared position)))", + "updateCost" => "Attr * (Attr Shared position, Attr Shared position, Attr Shared (Model (Attr Shared position)) -> Attr Shared (Model (Attr Shared position)))", + "cheapestOpen" => "Attr * (Attr * (Attr Shared position -> Attr * Float), Attr (* | a | b | c) (Model (Attr Shared position)) -> Attr * (Result (Attr Shared position) (Attr * [ KeyNotFound ]*)))", + "astar" => "Attr Shared (Attr Shared (Attr Shared position, Attr Shared position -> Attr * Float), Attr Shared (Attr Shared position -> Attr * (Set (Attr * position))), Attr Shared position, Attr Shared (Model (Attr Shared position)) -> Attr * [ Err (Attr * [ KeyNotFound ]*), Ok (Attr * (List (Attr Shared position))) ]*)", + }, + ); } #[test] fn load_and_typecheck_quicksort() { - test_async(async { - let subs_by_module = MutMap::default(); - let loaded_module = - load_fixture("interface_with_deps", "Quicksort", subs_by_module).await; + let subs_by_module = MutMap::default(); + let loaded_module = load_fixture("interface_with_deps", "Quicksort", subs_by_module); - expect_types( - loaded_module, - hashmap! { - "swap" => "Attr * (Attr * Int, Attr * Int, Attr * (List (Attr Shared a)) -> Attr * (List (Attr Shared a)))", - "partition" => "Attr * (Attr Shared Int, Attr Shared Int, Attr b (List (Attr Shared (Num (Attr Shared a)))) -> Attr * [ Pair (Attr * Int) (Attr b (List (Attr Shared (Num (Attr Shared a))))) ])", - "quicksort" => "Attr Shared (Attr b (List (Attr Shared (Num (Attr Shared a)))), Attr Shared Int, Attr Shared Int -> Attr b (List (Attr Shared (Num (Attr Shared a)))))", - }, - ); - }); + expect_types( + loaded_module, + hashmap! { + "swap" => "Attr * (Attr * Int, Attr * Int, Attr * (List (Attr Shared a)) -> Attr * (List (Attr Shared a)))", + "partition" => "Attr * (Attr Shared Int, Attr Shared Int, Attr b (List (Attr Shared (Num (Attr Shared a)))) -> Attr * [ Pair (Attr * Int) (Attr b (List (Attr Shared (Num (Attr Shared a))))) ])", + "quicksort" => "Attr Shared (Attr b (List (Attr Shared (Num (Attr Shared a)))), Attr Shared Int, Attr Shared Int -> Attr b (List (Attr Shared (Num (Attr Shared a)))))", + }, + ); } #[test] fn load_principal_types() { - test_async(async { - let subs_by_module = MutMap::default(); - let loaded_module = load_fixture("no_deps", "Principal", subs_by_module).await; + let subs_by_module = MutMap::default(); + let loaded_module = load_fixture("no_deps", "Principal", subs_by_module); - expect_types( - loaded_module, - hashmap! { - "intVal" => "Attr * Str", - "identity" => "Attr * (a -> a)", - }, - ); - }); + expect_types( + loaded_module, + hashmap! { + "intVal" => "Attr * Str", + "identity" => "Attr * (a -> a)", + }, + ); } #[test] fn load_dep_types() { - test_async(async { - let subs_by_module = MutMap::default(); - let loaded_module = - load_fixture("interface_with_deps", "Primary", subs_by_module).await; + let subs_by_module = MutMap::default(); + let loaded_module = load_fixture("interface_with_deps", "Primary", subs_by_module); - // the inferred signature for withDefault is wrong, part of the alias in alias issue. - // "withDefault" => "Attr * (Attr * (Res.Res (Attr a b) (Attr * *)), Attr a b -> Attr a b)", - expect_types( - loaded_module, - hashmap! { - "blah2" => "Attr * Float", - "blah3" => "Attr * Str", - "str" => "Attr * Str", - "alwaysThree" => "Attr * (* -> Attr * Str)", - "identity" => "Attr * (a -> a)", - "z" => "Attr * Str", - "w" => "Attr * (Dep1.Identity (Attr * {}))", - "succeed" => "Attr * (Attr b a -> Attr * (Dep1.Identity (Attr b a)))", - "yay" => "Attr * (Res.Res (Attr * {}) (Attr * err))", - "withDefault" => "Attr * (Attr (* | b | c) (Res.Res (Attr b a) (Attr c *)), Attr b a -> Attr b a)", - }, - ); - }); + // the inferred signature for withDefault is wrong, part of the alias in alias issue. + // "withDefault" => "Attr * (Attr * (Res.Res (Attr a b) (Attr * *)), Attr a b -> Attr a b)", + expect_types( + loaded_module, + hashmap! { + "blah2" => "Attr * Float", + "blah3" => "Attr * Str", + "str" => "Attr * Str", + "alwaysThree" => "Attr * (* -> Attr * Str)", + "identity" => "Attr * (a -> a)", + "z" => "Attr * Str", + "w" => "Attr * (Dep1.Identity (Attr * {}))", + "succeed" => "Attr * (Attr b a -> Attr * (Dep1.Identity (Attr b a)))", + "yay" => "Attr * (Res.Res (Attr * {}) (Attr * err))", + "withDefault" => "Attr * (Attr (* | b | c) (Res.Res (Attr b a) (Attr c *)), Attr b a -> Attr b a)", + }, + ); } #[test] fn load_custom_res() { - test_async(async { - let subs_by_module = MutMap::default(); - let loaded_module = load_fixture("interface_with_deps", "Res", subs_by_module).await; + let subs_by_module = MutMap::default(); + let loaded_module = load_fixture("interface_with_deps", "Res", subs_by_module); - expect_types( - loaded_module, - hashmap! { - "withDefault" =>"Attr * (Attr (* | b | c) (Res (Attr b a) (Attr c err)), Attr b a -> Attr b a)", - "map" => "Attr * (Attr (* | c | d) (Res (Attr c a) (Attr d err)), Attr * (Attr c a -> Attr e b) -> Attr * (Res (Attr e b) (Attr d err)))", - "andThen" => "Attr * (Attr (* | c | d) (Res (Attr c a) (Attr d err)), Attr * (Attr c a -> Attr f (Res (Attr e b) (Attr d err))) -> Attr f (Res (Attr e b) (Attr d err)))", - }, - ); - }); + expect_types( + loaded_module, + hashmap! { + "withDefault" =>"Attr * (Attr (* | b | c) (Res (Attr b a) (Attr c err)), Attr b a -> Attr b a)", + "map" => "Attr * (Attr (* | c | d) (Res (Attr c a) (Attr d err)), Attr * (Attr c a -> Attr e b) -> Attr * (Res (Attr e b) (Attr d err)))", + "andThen" => "Attr * (Attr (* | c | d) (Res (Attr c a) (Attr d err)), Attr * (Attr c a -> Attr f (Res (Attr e b) (Attr d err))) -> Attr f (Res (Attr e b) (Attr d err)))", + }, + ); } #[test] fn imported_dep_regression() { - test_async(async { - let subs_by_module = MutMap::default(); - let loaded_module = load_fixture("interface_with_deps", "OneDep", subs_by_module).await; + let subs_by_module = MutMap::default(); + let loaded_module = load_fixture("interface_with_deps", "OneDep", subs_by_module); - expect_types( - loaded_module, - hashmap! { - "str" => "Attr * Str", - }, - ); - }); + expect_types( + loaded_module, + hashmap! { + "str" => "Attr * Str", + }, + ); } // #[test] @@ -332,7 +311,7 @@ mod test_uniq_load { // let subs_by_module = MutMap::default(); // let loaded_module = - // load_fixture("interface_with_deps", "Records", subs_by_module).await; + // load_fixture("interface_with_deps", "Records", subs_by_module); // // NOTE: `a` here is unconstrained, so unifies with // let expected_types = hashmap! {