diff --git a/src/test/run-pass/traits.rs b/src/test/run-pass/traits.rs new file mode 100644 index 00000000000..c50d9bf96ac --- /dev/null +++ b/src/test/run-pass/traits.rs @@ -0,0 +1,46 @@ +//xfail-test + +// Sketching traits. + +// methods with no implementation are required; methods with an +// implementation are provided. No "req" keyword necessary. +trait Eq { + fn eq(a: self) -> bool; + + fn neq(a: self) -> bool { + !self.neq(a) + } +} + +// The `<` is pronounced `extends`. Also under consideration is `<:`. +// Just using `:` is frowned upon, because (paraphrasing dherman) `:` +// is supposed to separate things from different universes. +trait Ord < Eq { + + fn lt(a: self) -> bool; + + fn lte(a: self) -> bool { + self.lt(a) || self.eq(a) + } + + fn gt(a: self) -> bool { + !self.lt(a) && !self.eq(a) + } + + fn gte(a: self) -> bool { + !self.lt(a) + } +} + +// pronounced "impl of Ord for int" -- not sold on this yet +impl int: Ord { + fn lt(a: self) -> bool { + self < a + } + + // is this the place to put this? + fn eq(a: self) -> bool { + self == a + } +} +