about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorJoshua Wise <joshua@joshuawise.com>2011-11-26 04:18:31 -0500
committerNiko Matsakis <niko@alum.mit.edu>2011-11-28 10:41:45 -0800
commit90d27af42a7af82608363ad95456c88363a9c3da (patch)
tree0e893d6f5175572f42b012740263174cbafb1b90 /src/test
parent45dc5356dfa37b80a3e5ed37783a38060fdb8c1f (diff)
downloadrust-90d27af42a7af82608363ad95456c88363a9c3da.tar.gz
rust-90d27af42a7af82608363ad95456c88363a9c3da.zip
c_vec: add tests
Diffstat (limited to 'src/test')
-rw-r--r--src/test/stdtest/c_vec.rs57
-rw-r--r--src/test/stdtest/stdtest.rc1
2 files changed, 58 insertions, 0 deletions
diff --git a/src/test/stdtest/c_vec.rs b/src/test/stdtest/c_vec.rs
new file mode 100644
index 00000000000..2af2398662c
--- /dev/null
+++ b/src/test/stdtest/c_vec.rs
@@ -0,0 +1,57 @@
+// -*- rust -*-
+use std;
+import std::c_vec::*;
+import std::ctypes::*;
+
+#[link_name = ""]
+#[abi = "cdecl"]
+native mod libc {
+    fn malloc(n: size_t) -> *mutable u8;
+    fn free(m: *mutable u8);
+}
+
+fn malloc(n: size_t) -> t<u8> {
+    let mem = libc::malloc(n);
+
+    assert mem as int != 0;
+
+    ret unsafe { create_with_dtor(mem, n, bind libc::free(mem)) };
+}
+
+#[test]
+fn test_basic() {
+    let cv = malloc(16u);
+
+    set(cv, 3u, 8u8);
+    set(cv, 4u, 9u8);
+    assert get(cv, 3u) == 8u8;
+    assert get(cv, 4u) == 9u8;
+    assert size(cv) == 16u;
+}
+
+#[test]
+#[should_fail]
+fn test_overrun_get() {
+    let cv = malloc(16u);
+
+    get(cv, 17u);
+}
+
+#[test]
+#[should_fail]
+fn test_overrun_set() {
+    let cv = malloc(16u);
+
+    set(cv, 17u, 0u8);
+}
+
+#[test]
+fn test_and_I_mean_it() {
+    let cv = malloc(16u);
+    let p = unsafe { ptr(cv) };
+
+    set(cv, 0u, 32u8);
+    set(cv, 1u, 33u8);
+    assert unsafe { *p } == 32u8;
+    set(cv, 2u, 34u8); /* safety */
+}
diff --git a/src/test/stdtest/stdtest.rc b/src/test/stdtest/stdtest.rc
index a31f2430629..9d714f8f9c5 100644
--- a/src/test/stdtest/stdtest.rc
+++ b/src/test/stdtest/stdtest.rc
@@ -3,6 +3,7 @@ use std;
 mod bitv;
 mod bool;
 mod box;
+mod c_vec;
 mod char;
 mod comm;
 mod deque;