about summary refs log tree commit diff
path: root/src/libcoretest/raw.rs
diff options
context:
space:
mode:
authorSteven Fackler <sfackler@gmail.com>2014-06-28 13:57:36 -0700
committerSteven Fackler <sfackler@gmail.com>2014-06-29 15:57:21 -0700
commit1ed646eaf7d09455a086afa11bcd83a7d2a6b0f4 (patch)
tree3c7bc58191bc3b260c4522c115ddf869b986193f /src/libcoretest/raw.rs
parentff94f867d29a90ab59060c10a62f65994776a8c4 (diff)
downloadrust-1ed646eaf7d09455a086afa11bcd83a7d2a6b0f4.tar.gz
rust-1ed646eaf7d09455a086afa11bcd83a7d2a6b0f4.zip
Extract tests from libcore to a separate crate
Libcore's test infrastructure is complicated by the fact that many lang
items are defined in the crate. The current approach (realcore/realstd
imports) is hacky and hard to work with (tests inside of core::cmp
haven't been run for months!).

Moving tests to a separate crate does mean that they can only test the
public API of libcore, but I don't feel that that is too much of an
issue. The only tests that I had to get rid of were some checking the
various numeric formatters, but those are also exercised through normal
format! calls in other tests.
Diffstat (limited to 'src/libcoretest/raw.rs')
-rw-r--r--src/libcoretest/raw.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/libcoretest/raw.rs b/src/libcoretest/raw.rs
new file mode 100644
index 00000000000..f2c23c7c773
--- /dev/null
+++ b/src/libcoretest/raw.rs
@@ -0,0 +1,35 @@
+// Copyright 2014 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::raw::*;
+use core::mem;
+
+#[test]
+fn synthesize_closure() {
+    unsafe {
+        let x = 10;
+        let f: |int| -> int = |y| x + y;
+
+        assert_eq!(f(20), 30);
+
+        let original_closure: Closure = mem::transmute(f);
+
+        let actual_function_pointer = original_closure.code;
+        let environment = original_closure.env;
+
+        let new_closure = Closure {
+            code: actual_function_pointer,
+            env: environment
+        };
+
+        let new_f: |int| -> int = mem::transmute(new_closure);
+        assert_eq!(new_f(20), 30);
+    }
+}