the assert_eq! macro compares its arguments and fails if they're not
equal. It's more informative than fail_unless!, because it explicitly
writes the given and expected arguments on failure.
}
)
+ macro_rules! assert_eq (
+ ($given:expr , $expected:expr) =>
+ ({let given_val = $given;
+ let expected_val = $expected;
+ // check both directions of equality....
+ if !((given_val == expected_val) && (expected_val == given_val)) {
+ fail!(fmt!(\"expected: %?, given: %?\",expected_val,given_val));
+ }}))
+
macro_rules! condition (
{ $c:ident: $in:ty -> $out:ty; } => {
}
)
+
}";
}
--- /dev/null
+// error-pattern:expected: 15, given: 14
+
+#[deriving_eq]
+struct Point { x : int }
+
+fn main() {
+ assert_eq!(14,15);
+}
--- /dev/null
+#[deriving_eq]
+struct Point { x : int }
+
+fn main() {
+ assert_eq!(14,14);
+ assert_eq!(~"abc",~"abc");
+ assert_eq!(~Point{x:34},~Point{x:34});
+ assert_eq!(&Point{x:34},&Point{x:34});
+ assert_eq!(@Point{x:34},@Point{x:34});
+}