diff --git a/src/lib/str.rs b/src/lib/str.rs index 39e905f8c96d..9efb24b6e51f 100644 --- a/src/lib/str.rs +++ b/src/lib/str.rs @@ -4,7 +4,8 @@ export eq, lteq, hash, is_empty, is_not_empty, is_whitespace, byte_len, index, unshift_char, shift_char, pop_char, push_char, is_utf8, from_chars, to_chars, char_len, char_at, bytes, is_ascii, shift_byte, pop_byte, unsafe_from_byte, unsafe_from_bytes, from_char, char_range_at, - str_from_cstr, sbuf, as_buf, push_byte, utf8_char_width, safe_slice; + str_from_cstr, sbuf, as_buf, push_byte, utf8_char_width, safe_slice, + contains; native "rust" mod rustrt { fn rust_str_push(&s: str, ch: u8); @@ -254,6 +255,10 @@ fn find(haystack: str, needle: str) -> int { ret -1; } +fn contains(haystack: str, needle: str) -> bool { + 0 <= find(haystack, needle) +} + fn starts_with(haystack: str, needle: str) -> bool { let haystack_len: uint = byte_len(haystack); let needle_len: uint = byte_len(needle); diff --git a/src/test/stdtest/str.rs b/src/test/stdtest/str.rs index 5e79bb6fc206..f1839a0aa91d 100644 --- a/src/test/stdtest/str.rs +++ b/src/test/stdtest/str.rs @@ -304,3 +304,14 @@ fn vec_str_conversions() { i += 1u; } } + +#[test] +fn contains() { + assert str::contains("abcde", "bcd"); + assert str::contains("abcde", "abcd"); + assert str::contains("abcde", "bcde"); + assert str::contains("abcde", ""); + assert str::contains("", ""); + assert !str::contains("abcde", "def"); + assert !str::contains("", "a"); +}