erg-lang / erg

A statically typed language compatible with Python
http://erg-lang.org
Apache License 2.0
2.63k stars 54 forks source link

Fix renaming bugs #342

Closed mtshiba closed 1 year ago

GreasySlug commented 1 year ago

This may not matter much. I modified the test code. When I run the test, it fails

#[cfg(test)]
mod test {
    use crate::{
        set,
        tsort::{Node, _reorder_by_idx},
    };

    #[test]
    fn test() -> Result<(), ()> {
        let v = vec!["e", "d", "b", "a", "c"];
        let idx = vec![3, 2, 4, 1, 0];
        assert_eq!(vec!["a", "b", "c", "d", "e"], _reorder_by_idx(v, idx));

        let en_0 = Node::new("even n", (), set!["odd n (decl)", "odd 0"]);
        let o0_1 = Node::new("odd 0", (), set![]);
        let on_2 = Node::new("odd n", (), set!["even 0", "even n"]);
        let e0_3 = Node::new("even 0", (), set![]);
        let ond_4 = Node::new("odd n (decl)", (), set![]);
        let sorted = vec![
            ond_4.clone(),
            o0_1.clone(),
            en_0.clone(),
            e0_3.clone(),
            on_2.clone(),
        ];
        let dag = vec![en_0, o0_1, on_2, e0_3, ond_4];
        assert_eq!(sorted, crate::tsort::tsort(dag)?);
        Ok(())
    }
}
mtshiba commented 1 year ago

This may not matter much. I modified the test code. When I run the test, it fails

#[cfg(test)]
mod test {
    use crate::{
        set,
        tsort::{Node, _reorder_by_idx},
    };

    #[test]
    fn test() -> Result<(), ()> {
        let v = vec!["e", "d", "b", "a", "c"];
        let idx = vec![3, 2, 4, 1, 0];
        assert_eq!(vec!["a", "b", "c", "d", "e"], _reorder_by_idx(v, idx));

        let en_0 = Node::new("even n", (), set!["odd n (decl)", "odd 0"]);
        let o0_1 = Node::new("odd 0", (), set![]);
        let on_2 = Node::new("odd n", (), set!["even 0", "even n"]);
        let e0_3 = Node::new("even 0", (), set![]);
        let ond_4 = Node::new("odd n (decl)", (), set![]);
        let sorted = vec![
            ond_4.clone(),
            o0_1.clone(),
            en_0.clone(),
            e0_3.clone(),
            on_2.clone(),
        ];
        let dag = vec![en_0, o0_1, on_2, e0_3, ond_4];
        assert_eq!(sorted, crate::tsort::tsort(dag)?);
        Ok(())
    }
}
  • result
thread 'tsort::test::test' panicked at 'assertion failed: `(left == right)`    
  left: `[Node { id: "odd n (decl)", data: (), depends_on: {} }, Node { id: "odd 0", data: (), depends_on: {} }, Node { id: "even n", data: (), depends_on: {"odd 0", "odd n (decl)"} }, Node { id: "even 0", data: (), depends_on: {} }, Node { id: "odd n", data: (), depends_on: {"even 0", "even n"} }]`,
 right: `[Node { id: "odd 0", data: (), depends_on: {} }, Node { id: "odd n (decl)", data: (), depends_on: {} }, Node { id: "even n", data: (), depends_on: {"odd 0", "odd n (decl)"} }, Node { id: "even 0", data: (), depends_on: {} }, Node { id: "odd n", data: (), depends_on: {"even 0", "even n"} }]`', compiler\erg_common\tsort.rs:113:9

I didn't take into account the arbitrary nature of topological sorting. Fixed the test.