public void schemeEnvironentTest() { var root = SchemeEnvironmentRoot.instance; var testSymbol = new SchemeSymbol( "foo" ); SchemeEnvironment e1 = new SchemeEnvironment( root ); SchemeEnvironment e2 = new SchemeEnvironment( e1 ); root.set( testSymbol, new SchemeInteger( 1 ) ); Assert.AreEqual( root.get( testSymbol ), new SchemeInteger ( 1 ) ); Assert.AreEqual( e1.get( testSymbol ), new SchemeInteger( 1 ) ); Assert.AreEqual( e2.get( testSymbol ), new SchemeInteger( 1 ) ); var e1foo = e1.get( testSymbol ); Assert.IsTrue( ( (SchemeInteger) e1foo ).value == 1 ); e2.set( testSymbol, new SchemeInteger( 2 ) ); root.set( testSymbol, new SchemeInteger( 4 ) ); Assert.IsTrue( e2.get( testSymbol ) != root.get( testSymbol ) ); //test correctness in in evaluator var reader = new SchemeReader(); var evaluator = new SchemeEvaluator(); var ast = reader.parseString( "(define x 1)" ); evaluator.evaluate( ast ); ast = reader.parseString( "x" ); Assert.AreEqual( evaluator.evaluate( ast )[0], new SchemeInteger( 1 ) ); ast = reader.parseString( "(define bar (lambda () (define x 23) (x)))" ); evaluator.evaluate( ast ); ast = reader.parseString( "(bar)" ); Assert.AreEqual( evaluator.evaluate( ast )[1], new SchemeInteger( 23 ) ); ast = reader.parseString( "x" ); Assert.AreEqual( evaluator.evaluate( ast )[0], new SchemeInteger( 1 ) ); }
public ISchemeEnvironment getClonedEnv(ISchemeEnvironment parent) { var tmp = new SchemeEnvironment(_symbolTable, parent); return (ISchemeEnvironment)tmp; }