Skip to main content

aver/
effects.rs

1/// Returns true if a declared effect satisfies a required effect.
2///
3/// Rule:
4/// - Exact match only: "Http.get" satisfies "Http.get"
5pub fn effect_satisfies(declared: &str, required: &str) -> bool {
6    declared == required
7}
8
9#[cfg(test)]
10mod tests {
11    use super::*;
12
13    // -- effect_satisfies --
14
15    #[test]
16    fn exact_match() {
17        assert!(effect_satisfies("Http", "Http"));
18        assert!(effect_satisfies("Console", "Console"));
19    }
20
21    #[test]
22    fn child_does_not_cover_parent() {
23        assert!(!effect_satisfies("Http.get", "Http"));
24        assert!(!effect_satisfies("Disk.read", "Disk"));
25    }
26
27    #[test]
28    fn parent_does_not_cover_child() {
29        assert!(!effect_satisfies("Http", "Http.get"));
30        assert!(!effect_satisfies("Http", "Http.post"));
31        assert!(!effect_satisfies("Disk", "Disk.read"));
32    }
33
34    #[test]
35    fn different_children() {
36        assert!(!effect_satisfies("Http.get", "Http.post"));
37        assert!(!effect_satisfies("Disk.read", "Disk.write"));
38    }
39}