diff options
| author | Joshua Wise <joshua@joshuawise.com> | 2011-11-26 04:18:31 -0500 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2011-11-28 10:41:45 -0800 |
| commit | 90d27af42a7af82608363ad95456c88363a9c3da (patch) | |
| tree | 0e893d6f5175572f42b012740263174cbafb1b90 /src/test/stdtest | |
| parent | 45dc5356dfa37b80a3e5ed37783a38060fdb8c1f (diff) | |
| download | rust-90d27af42a7af82608363ad95456c88363a9c3da.tar.gz rust-90d27af42a7af82608363ad95456c88363a9c3da.zip | |
c_vec: add tests
Diffstat (limited to 'src/test/stdtest')
| -rw-r--r-- | src/test/stdtest/c_vec.rs | 57 | ||||
| -rw-r--r-- | src/test/stdtest/stdtest.rc | 1 |
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; |
