From 04e89af6dbf0e99c8cec6763a81b41dcf51e52c3 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 6 Oct 2011 16:08:44 -0700 Subject: [PATCH] Add std::str::contains --- src/lib/str.rs | 7 ++++++- src/test/stdtest/str.rs | 11 +++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/lib/str.rs b/src/lib/str.rs index 39e905f8c96..9efb24b6e51 100644 --- a/src/lib/str.rs +++ b/src/lib/str.rs @@ -4,7 +4,8 @@ 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 match_at(haystack: str, needle: str, i: int) -> bool { 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 5e79bb6fc20..f1839a0aa91 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"); +} -- GitLab