about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/test/run-pass/obj-docs.rs66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/test/run-pass/obj-docs.rs b/src/test/run-pass/obj-docs.rs
new file mode 100644
index 00000000000..4c2d34555c4
--- /dev/null
+++ b/src/test/run-pass/obj-docs.rs
@@ -0,0 +1,66 @@
+// Sanity-check the code examples that appear in the object system
+// documentation.
+
+fn main() {
+
+    // Ref.Item.Obj
+    obj counter(state: @mutable int) {
+        fn incr() {
+            *state += 1;
+            }
+        fn get() -> int {
+            ret *state;
+            }
+        }
+
+    let c: counter = counter(@mutable 1);
+
+    c.incr();
+    c.incr();
+    assert c.get() == 3;
+
+    obj my_obj() {
+        fn get() -> int {
+            ret 3;
+        }
+        fn foo() -> int{
+            let c = self.get();
+            ret c + 2; // returns 5
+        }
+    }
+
+    let o = my_obj();
+    assert o.foo() == 5;
+
+    // Ref.Type.Obj
+    type taker = obj {
+        fn take(int);
+    };
+
+    obj adder(x: @mutable int) {
+        fn take(y: int) {
+            *x += y;
+        }
+    }
+
+    obj sender(c: chan[int]) {
+        fn take(z: int) {
+            c <| z;
+        }
+    }
+
+    fn give_ints(t: taker) {
+        t.take(1);
+        t.take(2);
+        t.take(3);
+    }
+
+    let p: port[int] = port();
+
+    let t1: taker = adder(@mutable 0);
+    let t2: taker = sender(chan(p));
+
+    give_ints(t1);
+    give_ints(t2);
+}
+