From 90d27af42a7af82608363ad95456c88363a9c3da Mon Sep 17 00:00:00 2001 From: Joshua Wise Date: Sat, 26 Nov 2011 04:18:31 -0500 Subject: [PATCH] c_vec: add tests --- src/test/stdtest/c_vec.rs | 57 +++++++++++++++++++++++++++++++++++++ src/test/stdtest/stdtest.rc | 1 + 2 files changed, 58 insertions(+) create mode 100644 src/test/stdtest/c_vec.rs 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 { + 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;