about summary refs log tree commit diff
path: root/src/libcoretest
diff options
context:
space:
mode:
authorJonathan Reem <jonathan.reem@gmail.com>2015-01-06 22:59:07 +0100
committerJonathan Reem <jonathan.reem@gmail.com>2015-01-08 00:49:19 +0100
commit2606f99871511acaabd8aaec87913a5203beb39f (patch)
treeb4704c0bd41ef77d54a21179fee16786ab53b7ad /src/libcoretest
parentdfd557bd73a27966b242635b04f2a9fca6eadce8 (diff)
downloadrust-2606f99871511acaabd8aaec87913a5203beb39f.tar.gz
rust-2606f99871511acaabd8aaec87913a5203beb39f.zip
Remove the unneeded Sized bound on TypeId creation
This bound is probably unintentional and is unnecessarily
constricting.

To facilitate this change, it was also necessary to modify
resolve to recurse on and resolve type parameters in extern { }
blocks. This fixes an ICE when using bounds on type parameters
during the declaration of intrinsics.

This also adds tests for TypeId on both Sized and Unsized
tests as well as a test for using type parameters and bounds
in extern { } blocks.
Diffstat (limited to 'src/libcoretest')
-rw-r--r--src/libcoretest/intrinsics.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/libcoretest/intrinsics.rs b/src/libcoretest/intrinsics.rs
new file mode 100644
index 00000000000..bcf8a6a433b
--- /dev/null
+++ b/src/libcoretest/intrinsics.rs
@@ -0,0 +1,31 @@
+// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+use core::intrinsics::TypeId;
+
+#[test]
+fn test_typeid_sized_types() {
+    struct X; struct Y(uint);
+
+    assert_eq!(TypeId::of::<X>(), TypeId::of::<X>());
+    assert_eq!(TypeId::of::<Y>(), TypeId::of::<Y>());
+    assert!(TypeId::of::<X>() != TypeId::of::<Y>());
+}
+
+#[test]
+fn test_typeid_unsized_types() {
+    trait Z {}
+    struct X(str); struct Y(Z + 'static);
+
+    assert_eq!(TypeId::of::<X>(), TypeId::of::<X>());
+    assert_eq!(TypeId::of::<Y>(), TypeId::of::<Y>());
+    assert!(TypeId::of::<X>() != TypeId::of::<Y>());
+}
+