From f307688bf44404b371b91b3b2a67048088695fe1 Mon Sep 17 00:00:00 2001 From: Roy Frostig Date: Wed, 11 Aug 2010 16:06:45 -0700 Subject: Add native vec[u8] to str converter. Put in workaround for leak in str to vec[u8] converter. Add testcase exercising both. Drive-by fix a potential array-out-of-bounds write on rust_str buffers. --- src/test/run-pass/lib-vec-str-conversions.rs | 41 ++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/test/run-pass/lib-vec-str-conversions.rs (limited to 'src/test') diff --git a/src/test/run-pass/lib-vec-str-conversions.rs b/src/test/run-pass/lib-vec-str-conversions.rs new file mode 100644 index 00000000..1d6b61a1 --- /dev/null +++ b/src/test/run-pass/lib-vec-str-conversions.rs @@ -0,0 +1,41 @@ +// -*- rust -*- + +use std; +import std._str; +import std._vec; + +fn test_simple() { + let str s1 = "All mimsy were the borogoves"; + + /* + * FIXME from_bytes(vec[u8] v) has constraint is_utf(v), which is + * unimplemented and thereby just fails. This doesn't stop us from + * using from_bytes for now since the constraint system isn't fully + * working, but we should implement is_utf8 before that happens. + */ + + let vec[u8] v = _str.bytes(s1); + let str s2 = _str.from_bytes(v); + + let uint i = 0u; + let uint n1 = _str.byte_len(s1); + let uint n2 = _vec.len[u8](v); + + check (n1 == n2); + + while (i < n1) { + let u8 a = s1.(i); + let u8 b = s2.(i); + log a; + log b; + check (a == b); + i += 1u; + } + + log "refcnt is"; + log _str.refcount(s1); +} + +fn main() { + test_simple(); +} -- cgit v1.2.3