Fork of daniellemaywood.uk/gleam — Wasm codegen work
2

Configure Feed

Select the types of activity you want to include in your feed.

Add cycle detection tests

+82 -32
+82 -32
compiler-core/src/dep_tree.rs
··· 42 42 } 43 43 } 44 44 45 - // TODO: test 46 45 fn import_cycle( 47 46 cycle: Cycle<NodeIndex>, 48 47 graph: &petgraph::Graph<(), ()>, ··· 84 83 false 85 84 } 86 85 87 - #[test] 88 - fn toposort_deps_test() { 89 - // All deps are nodes 90 - assert_eq!( 91 - toposort_deps(vec![ 92 - ("a".into(), vec!["b".into()]), 93 - ("c".into(), vec![]), 94 - ("b".into(), vec!["c".into()]) 95 - ]), 96 - Ok(vec!["c".into(), "b".into(), "a".into()]) 97 - ); 98 - 99 - // No deps 100 - assert_eq!( 101 - toposort_deps(vec![ 102 - ("no-deps-1".into(), vec![]), 103 - ("no-deps-2".into(), vec![]) 104 - ]), 105 - Ok(vec!["no-deps-1".into(), "no-deps-2".into(),]) 106 - ); 107 - 108 - // Some deps are not nodes (and thus are ignored) 109 - assert_eq!( 110 - toposort_deps(vec![ 111 - ("a".into(), vec!["b".into(), "z".into()]), 112 - ("b".into(), vec!["x".into()]) 113 - ]), 114 - Ok(vec!["b".into(), "a".into()]) 115 - ); 116 - } 117 - 118 86 #[derive(Debug, PartialEq)] 119 87 pub enum Error { 120 88 Cycle(Vec<EcoString>), 121 89 } 90 + 91 + #[cfg(test)] 92 + mod tests { 93 + use super::*; 94 + 95 + #[test] 96 + fn toposort_deps_test() { 97 + // All deps are nodes 98 + assert_eq!( 99 + toposort_deps(vec![ 100 + ("a".into(), vec!["b".into()]), 101 + ("c".into(), vec![]), 102 + ("b".into(), vec!["c".into()]) 103 + ]), 104 + Ok(vec!["c".into(), "b".into(), "a".into()]) 105 + ); 106 + 107 + // No deps 108 + assert_eq!( 109 + toposort_deps(vec![ 110 + ("no-deps-1".into(), vec![]), 111 + ("no-deps-2".into(), vec![]) 112 + ]), 113 + Ok(vec!["no-deps-1".into(), "no-deps-2".into(),]) 114 + ); 115 + 116 + // Some deps are not nodes (and thus are ignored) 117 + assert_eq!( 118 + toposort_deps(vec![ 119 + ("a".into(), vec!["b".into(), "z".into()]), 120 + ("b".into(), vec!["x".into()]) 121 + ]), 122 + Ok(vec!["b".into(), "a".into()]) 123 + ); 124 + } 125 + 126 + #[test] 127 + fn cycle_detection() { 128 + // a ---+ 129 + // ^ | 130 + // | v 131 + // +----+ 132 + assert_eq!( 133 + toposort_deps(vec![("a".into(), vec!["a".into()])]), 134 + Err(Error::Cycle(vec!["a".into()])) 135 + ); 136 + 137 + // a -> b -> c 138 + // ^ v 139 + // | | 140 + // +---------+ 141 + assert_eq!( 142 + toposort_deps(vec![ 143 + ("a".into(), vec!["b".into()]), 144 + ("b".into(), vec!["c".into()]), 145 + ("c".into(), vec!["a".into()]), 146 + ]), 147 + Err(Error::Cycle(vec!["c".into(), "b".into(), "a".into()])) 148 + ); 149 + 150 + // a -> b <- e 151 + // | | ^ 152 + // v v | 153 + // f c -> d 154 + assert_eq!( 155 + toposort_deps(vec![ 156 + ("a".into(), vec!["b".into()]), 157 + ("b".into(), vec!["c".into()]), 158 + ("c".into(), vec!["d".into()]), 159 + ("d".into(), vec!["e".into()]), 160 + ("e".into(), vec!["b".into()]), 161 + ("a".into(), vec!["f".into()]), 162 + ]), 163 + Err(Error::Cycle(vec![ 164 + "e".into(), 165 + "d".into(), 166 + "c".into(), 167 + "b".into(), 168 + ])) 169 + ); 170 + } 171 + }