/* SI 413 Fall 2011 * Little program to test the Frame class implementation */ #include <iostream> #include <cstdlib> using namespace std; #include "frame.hpp" // Check that this value equals that number; otherwise error. void check(Value val, int num) { if (val.num() != num) { cerr << "Check failed! Expected value was " << num << endl; exit(1); } } int main() { // Make a new frame, with null parent (like a global scope frame) Frame* f1 = new Frame; f1->bind("a",5); check (f1->lookup("a"), 5); // Make a child frame of f1 Frame* f2 = new Frame(f1); // Check the lookup into the parent frame check(f2->lookup("a"), 5); // Give this one a re-binding of a, and a brand-new binding of b f2->rebind("a",13); f2->bind("b", 19); // Check that a got changed in f1 check(f1->lookup("a"), 13); check(f2->lookup("b"), 19); // Make a couple more frames Frame* f3 = new Frame(f2); Frame* f4 = new Frame(f1); // Changing a in f4 should change it everywhere. f4->rebind("a", 25); check(f1->lookup("a"), 25); check(f2->lookup("a"), 25); check(f3->lookup("a"), 25); // Make a new b in f3, make sure it's really new. f3->bind("b", 36); check(f2->lookup("b"), 19); check(f3->lookup("b"), 36); f3->rebind("b", 51); check(f2->lookup("b"), 19); check(f3->lookup("b"), 51); cout << "All checks passed!" << endl; return 0; }