| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | 
							- describe("S.root(dispose)", function () {
 
-     it("disables updates and sets computation's value to undefined", function () {
 
- 		S.root(function (dispose) {
 
- 			var c = 0,
 
- 				d = S.data(0),
 
- 				f = S(function () { c++; return d(); });
 
- 			expect(c).toBe(1);
 
- 			expect(f()).toBe(0);
 
- 			d(1);
 
- 			expect(c).toBe(2);
 
- 			expect(f()).toBe(1);
 
- 			dispose();
 
- 			d(2);
 
- 			expect(c).toBe(2);
 
- 			expect(f()).toBe(1);
 
- 		});
 
-     });
 
- 	// unconventional uses of dispose -- to insure S doesn't behaves as expected in these cases
 
- 	it("works from the body of its own computation", function () {
 
- 		S.root(function (dispose) {
 
- 			var c = 0,
 
- 				d = S.data(0),
 
- 				f = S(function () { c++; if (d()) dispose(); d(); });
 
- 			expect(c).toBe(1);
 
- 			d(1);
 
- 			expect(c).toBe(2);
 
- 			d(2);
 
- 			expect(c).toBe(2);
 
- 		});
 
- 	});
 
- 	it("works from the body of a subcomputation", function () {
 
- 		S.root(function (dispose) {
 
- 			var c = 0,
 
- 				d = S.data(0),
 
- 				f = S(function () {
 
- 					c++;
 
- 					d();
 
- 					S(function () {	if (d()) dispose(); });
 
- 				});
 
- 			expect(c).toBe(1);
 
- 			d(1);
 
- 			expect(c).toBe(2);
 
- 			d(2);
 
- 			expect(c).toBe(2);
 
- 		});
 
- 	});
 
- });
 
 
  |