1
// Tests for various functionalities of the Model
2

            
3
use std::{cell::RefCell, rc::Rc};
4

            
5
use conjure_core::ast::Model;
6
use conjure_oxide::ast::*;
7
use declaration::Declaration;
8

            
9
#[test]
10
1
fn modify_domain() {
11
1
    let a = Name::UserName(String::from("a"));
12
1

            
13
1
    let d1 = Domain::IntDomain(vec![Range::Bounded(1, 3)]);
14
1
    let d2 = Domain::IntDomain(vec![Range::Bounded(1, 2)]);
15
1

            
16
1
    let mut symbols = SymbolTable::new();
17
1
    symbols
18
1
        .insert(Rc::new(Declaration::new_var(a.clone(), d1.clone())))
19
1
        .unwrap();
20
1

            
21
1
    let m = Model::new(Rc::new(RefCell::new(symbols)), vec![], Default::default());
22
1

            
23
1
    assert_eq!(&m.symbols().domain(&a).unwrap(), &d1);
24

            
25
1
    let mut decl_a = m.symbols().lookup(&a).unwrap();
26
1

            
27
1
    Rc::make_mut(&mut decl_a).as_var_mut().unwrap().domain = d2.clone();
28
1

            
29
1
    m.symbols_mut().update_insert(decl_a);
30
1

            
31
1
    assert_eq!(&m.symbols().domain(&a).unwrap(), &d2);
32
1
}