common::str::get_chars with test

This commit is contained in:
Jeong YunWon committed 2020-07-27 08:29:15 +09:00
1 parent 3bc7141564
commit 2d01cffbf9
3 files changed
+32 -10

No files matched your search

+1
View File
@@ -4,3 +4,4 @@ pub mod cell;
pub mod float_ops;
pub mod hash;
pub mod rc;
pub mod str;
+30
View File
@@ -0,0 +1,30 @@
pub fn get_chars(s: &str, range: std::ops::Range<usize>) -> &str {
let mut chars = s.chars();
for _ in 0..range.start {
let _ = chars.next();
}
let start = chars.as_str();
for _ in range {
let _ = chars.next();
}
let end = chars.as_str();
&start[..start.len() - end.len()]
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_get_chars() {
let s = "0123456789";
assert_eq!(get_chars(s, 3..7), "3456");
assert_eq!(get_chars(s, 3..7), &s[3..7]);
let s = "0유니코드 문자열9";
assert_eq!(get_chars(s, 3..7), "코드 문");
let s = "0😀😃😄😁😆😅😂🤣9";
assert_eq!(get_chars(s, 3..7), "😄😁😆😅");
}
}
+1 -10
View File
@@ -1406,16 +1406,7 @@ impl<'s> PyCommonString<'s, char> for str {
}
fn get_chars<'a>(&'a self, range: std::ops::Range<usize>) -> &'a Self {
let mut chars = self.chars();
for _ in 0..range.start {
let _ = chars.next();
}
let start = chars.as_str();
for _ in range {
let _ = chars.next();
}
let end = chars.as_str();
&start[..start.len() - end.len()]
rustpython_common::str::get_chars(self, range)
}
fn is_empty(&self) -> bool {