Got unit tests compiling again, and added a few more to Rope.

This commit is contained in:
Nathan Vegdahl 2015-02-22 12:28:31 -08:00
parent 02f24e4e6f
commit dcfa3fe0d5
2 changed files with 316 additions and 47 deletions

View File

@ -212,9 +212,20 @@ impl Buffer {
}
// All other cases
else {
let a = self.text.line_index_to_grapheme_index(line_a);
let a = if line_a > 0 {
self.text.line_index_to_grapheme_index(line_a) - 1
}
else {
0
};
let b = if line_b < self.line_count() {
self.text.line_index_to_grapheme_index(line_b)
if line_a > 0 {
self.text.line_index_to_grapheme_index(line_b) - 1
}
else {
self.text.line_index_to_grapheme_index(line_b)
}
}
else {
self.text.grapheme_count()
@ -428,7 +439,7 @@ impl Buffer {
#[cfg(test)]
mod tests {
#![allow(unused_imports)]
use super::{Buffer, BufferLineIter};
use super::*;
#[test]
fn insert_text() {
@ -439,7 +450,7 @@ mod tests {
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 9);
assert!(buf.text.line_count == 1);
assert!(buf.text.line_count() == 1);
assert!(Some("H") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("l") == iter.next());
@ -462,7 +473,7 @@ mod tests {
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 11);
assert!(buf.text.line_count == 3);
assert!(buf.text.line_count() == 3);
assert!(Some("H") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("l") == iter.next());
@ -488,7 +499,7 @@ mod tests {
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 17);
assert!(buf.text.line_count == 3);
assert!(buf.text.line_count() == 3);
assert!(Some("A") == iter.next());
assert!(Some("g") == iter.next());
assert!(Some("a") == iter.next());
@ -520,7 +531,7 @@ mod tests {
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 17);
assert!(buf.text.line_count == 3);
assert!(buf.text.line_count() == 3);
assert!(Some("H") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("l") == iter.next());
@ -552,7 +563,7 @@ mod tests {
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 16);
assert!(buf.text.line_count == 3);
assert!(buf.text.line_count() == 3);
assert!(Some("H") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("l") == iter.next());
@ -583,7 +594,7 @@ mod tests {
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 16);
assert!(buf.text.line_count == 3);
assert!(buf.text.line_count() == 3);
assert!(Some("H") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("l") == iter.next());
@ -614,7 +625,7 @@ mod tests {
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 16);
assert!(buf.text.line_count == 3);
assert!(buf.text.line_count() == 3);
assert!(Some("H") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("a") == iter.next());
@ -646,7 +657,7 @@ mod tests {
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 16);
assert!(buf.text.line_count == 3);
assert!(buf.text.line_count() == 3);
assert!(Some("H") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("l") == iter.next());
@ -678,7 +689,7 @@ mod tests {
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 20);
assert!(buf.text.line_count == 7);
assert!(buf.text.line_count() == 7);
assert!(Some("H") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("\n") == iter.next());
@ -710,14 +721,14 @@ mod tests {
buf.insert_text("Hi\nthere\npeople\nof\nthe\nworld!", 0);
assert!(buf.grapheme_count() == 29);
assert!(buf.text.line_count == 6);
assert!(buf.text.line_count() == 6);
buf._remove_text(0, 3);
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 26);
assert!(buf.text.line_count == 5);
assert!(buf.text.line_count() == 5);
assert!(Some("t") == iter.next());
assert!(Some("h") == iter.next());
assert!(Some("e") == iter.next());
@ -754,14 +765,14 @@ mod tests {
buf.insert_text("Hi\nthere\npeople\nof\nthe\nworld!", 0);
assert!(buf.grapheme_count() == 29);
assert!(buf.text.line_count == 6);
assert!(buf.text.line_count() == 6);
buf._remove_text(0, 12);
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 17);
assert!(buf.text.line_count == 4);
assert!(buf.text.line_count() == 4);
assert!(Some("p") == iter.next());
assert!(Some("l") == iter.next());
assert!(Some("e") == iter.next());
@ -789,14 +800,14 @@ mod tests {
buf.insert_text("Hi\nthere\npeople\nof\nthe\nworld!", 0);
assert!(buf.grapheme_count() == 29);
assert!(buf.text.line_count == 6);
assert!(buf.text.line_count() == 6);
buf._remove_text(5, 17);
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 17);
assert!(buf.text.line_count == 4);
assert!(buf.text.line_count() == 4);
assert!(Some("H") == iter.next());
assert!(Some("i") == iter.next());
assert!(Some("\n") == iter.next());
@ -824,14 +835,14 @@ mod tests {
buf.insert_text("Hi\nthere\npeople\nof\nthe\nworld!", 0);
assert!(buf.grapheme_count() == 29);
assert!(buf.text.line_count == 6);
assert!(buf.text.line_count() == 6);
buf._remove_text(23, 29);
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 23);
assert!(buf.text.line_count == 6);
assert!(buf.text.line_count() == 6);
assert!(Some("H") == iter.next());
assert!(Some("i") == iter.next());
assert!(Some("\n") == iter.next());
@ -865,14 +876,14 @@ mod tests {
buf.insert_text("Hi\nthere\npeople\nof\nthe\nworld!", 0);
assert!(buf.grapheme_count() == 29);
assert!(buf.text.line_count == 6);
assert!(buf.text.line_count() == 6);
buf._remove_text(17, 29);
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 17);
assert!(buf.text.line_count == 4);
assert!(buf.text.line_count() == 4);
assert!(Some("H") == iter.next());
assert!(Some("i") == iter.next());
assert!(Some("\n") == iter.next());
@ -900,14 +911,14 @@ mod tests {
buf.insert_text("Hello\nworld!", 0);
assert!(buf.grapheme_count() == 12);
assert!(buf.text.line_count == 2);
assert!(buf.text.line_count() == 2);
buf._remove_text(3, 12);
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 3);
assert!(buf.text.line_count == 1);
assert!(buf.text.line_count() == 1);
assert!(Some("H") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("l") == iter.next());
@ -921,14 +932,14 @@ mod tests {
buf.insert_text("Hi\nthere\nworld!", 0);
assert!(buf.grapheme_count() == 15);
assert!(buf.text.line_count == 3);
assert!(buf.text.line_count() == 3);
buf._remove_text(5, 15);
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 5);
assert!(buf.text.line_count == 2);
assert!(buf.text.line_count() == 2);
assert!(Some("H") == iter.next());
assert!(Some("i") == iter.next());
assert!(Some("\n") == iter.next());
@ -944,14 +955,14 @@ mod tests {
buf.insert_text("Hello\nworld!", 0);
assert!(buf.grapheme_count() == 12);
assert!(buf.text.line_count == 2);
assert!(buf.text.line_count() == 2);
buf._remove_text(3, 11);
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 4);
assert!(buf.text.line_count == 1);
assert!(buf.text.line_count() == 1);
assert!(Some("H") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("l") == iter.next());
@ -966,14 +977,14 @@ mod tests {
buf.insert_text("Hello\nworld!", 0);
assert!(buf.grapheme_count() == 12);
assert!(buf.text.line_count == 2);
assert!(buf.text.line_count() == 2);
buf._remove_text(8, 12);
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 8);
assert!(buf.text.line_count == 2);
assert!(buf.text.line_count() == 2);
assert!(Some("H") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("l") == iter.next());
@ -992,14 +1003,14 @@ mod tests {
buf.insert_text("12\n34\n56\n78", 0);
assert!(buf.grapheme_count() == 11);
assert!(buf.text.line_count == 4);
assert!(buf.text.line_count() == 4);
buf._remove_text(4, 11);
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 4);
assert!(buf.text.line_count == 2);
assert!(buf.text.line_count() == 2);
assert!(Some("1") == iter.next());
assert!(Some("2") == iter.next());
assert!(Some("\n") == iter.next());
@ -1014,14 +1025,14 @@ mod tests {
buf.insert_text("1234567890", 0);
assert!(buf.grapheme_count() == 10);
assert!(buf.text.line_count == 1);
assert!(buf.text.line_count() == 1);
buf._remove_text(9, 10);
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 9);
assert!(buf.text.line_count == 1);
assert!(buf.text.line_count() == 1);
assert!(Some("1") == iter.next());
assert!(Some("2") == iter.next());
assert!(Some("3") == iter.next());
@ -1046,7 +1057,7 @@ mod tests {
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 29);
assert!(buf.text.line_count == 6);
assert!(buf.text.line_count() == 6);
assert!(Some("t") == iter.next());
assert!(Some("h") == iter.next());
assert!(Some("H") == iter.next());
@ -1091,7 +1102,7 @@ mod tests {
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 29);
assert!(buf.text.line_count == 6);
assert!(buf.text.line_count() == 6);
assert!(Some("H") == iter.next());
assert!(Some("i") == iter.next());
assert!(Some("\n") == iter.next());
@ -1136,7 +1147,7 @@ mod tests {
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 29);
assert!(buf.text.line_count == 6);
assert!(buf.text.line_count() == 6);
assert!(Some("H") == iter.next());
assert!(Some("i") == iter.next());
assert!(Some("\n") == iter.next());
@ -1181,7 +1192,7 @@ mod tests {
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 29);
assert!(buf.text.line_count == 6);
assert!(buf.text.line_count() == 6);
assert!(Some("H") == iter.next());
assert!(Some("i") == iter.next());
assert!(Some("\n") == iter.next());
@ -1226,7 +1237,7 @@ mod tests {
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 29);
assert!(buf.text.line_count == 6);
assert!(buf.text.line_count() == 6);
assert!(Some("H") == iter.next());
assert!(Some("i") == iter.next());
assert!(Some("\n") == iter.next());
@ -1266,14 +1277,14 @@ mod tests {
buf.insert_text("Hi\nthere\npeople\nof\nthe\nworld!", 0);
assert!(buf.grapheme_count() == 29);
assert!(buf.text.line_count == 6);
assert!(buf.text.line_count() == 6);
buf.remove_lines(0, 3);
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 13);
assert!(buf.text.line_count == 3);
assert!(buf.text.line_count() == 3);
assert!(Some("o") == iter.next());
assert!(Some("f") == iter.next());
assert!(Some("\n") == iter.next());
@ -1297,14 +1308,14 @@ mod tests {
buf.insert_text("Hi\nthere\npeople\nof\nthe\nworld!", 0);
assert!(buf.grapheme_count() == 29);
assert!(buf.text.line_count == 6);
assert!(buf.text.line_count() == 6);
buf.remove_lines(1, 4);
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 13);
assert!(buf.text.line_count == 3);
assert!(buf.text.line_count() == 3);
assert!(Some("H") == iter.next());
assert!(Some("i") == iter.next());
assert!(Some("\n") == iter.next());
@ -1327,15 +1338,15 @@ mod tests {
let mut buf = Buffer::new();
buf.insert_text("Hi\nthere\npeople\nof\nthe\nworld!", 0);
assert!(buf.grapheme_count() == 29);
assert!(buf.text.line_count == 6);
assert_eq!(buf.grapheme_count(), 29);
assert_eq!(buf.text.line_count(), 6);
buf.remove_lines(3, 6);
let mut iter = buf.grapheme_iter();
assert!(buf.grapheme_count() == 15);
assert!(buf.text.line_count == 3);
assert_eq!(buf.grapheme_count(), 15);
assert_eq!(buf.text.line_count(), 3);
assert!(Some("H") == iter.next());
assert!(Some("i") == iter.next());
assert!(Some("\n") == iter.next());
@ -1355,6 +1366,75 @@ mod tests {
}
#[test]
fn remove_lines_4() {
let mut buf = Buffer::new();
buf.insert_text("Hi\nthere\npeople\nof\nthe\n", 0);
assert_eq!(buf.grapheme_count(), 23);
assert_eq!(buf.text.line_count(), 6);
buf.remove_lines(3, 6);
let mut iter = buf.grapheme_iter();
assert_eq!(buf.grapheme_count(), 15);
assert_eq!(buf.text.line_count(), 3);
assert!(Some("H") == iter.next());
assert!(Some("i") == iter.next());
assert!(Some("\n") == iter.next());
assert!(Some("t") == iter.next());
assert!(Some("h") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("r") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("\n") == iter.next());
assert!(Some("p") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("o") == iter.next());
assert!(Some("p") == iter.next());
assert!(Some("l") == iter.next());
assert!(Some("e") == iter.next());
assert!(None == iter.next());
}
#[test]
fn remove_lines_5() {
let mut buf = Buffer::new();
buf.insert_text("Hi\nthere\npeople\nof\nthe\nworld!", 0);
assert_eq!(buf.grapheme_count(), 29);
assert_eq!(buf.text.line_count(), 6);
buf.remove_lines(0, 6);
let mut iter = buf.grapheme_iter();
assert_eq!(buf.grapheme_count(), 0);
assert_eq!(buf.text.line_count(), 1);
assert!(None == iter.next());
}
#[test]
fn remove_lines_6() {
let mut buf = Buffer::new();
buf.insert_text("Hi\nthere\npeople\nof\nthe\n", 0);
assert_eq!(buf.grapheme_count(), 23);
assert_eq!(buf.text.line_count(), 6);
buf.remove_lines(0, 6);
let mut iter = buf.grapheme_iter();
assert_eq!(buf.grapheme_count(), 0);
assert_eq!(buf.text.line_count(), 1);
assert!(None == iter.next());
}
#[test]
fn line_col_to_index_1() {
let mut buf = Buffer::new();

View File

@ -1210,6 +1210,195 @@ mod tests {
assert_eq!("", &rope[4]);
}
#[test]
fn slice_1() {
let rope = Rope::new_from_str("Hello everyone! How are you doing, eh?");
let s = rope.slice(0, 15);
let mut iter = s.grapheme_iter();
assert_eq!(s.grapheme_count(), 15);
assert!(Some("H") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("l") == iter.next());
assert!(Some("l") == iter.next());
assert!(Some("o") == iter.next());
assert!(Some(" ") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("v") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("r") == iter.next());
assert!(Some("y") == iter.next());
assert!(Some("o") == iter.next());
assert!(Some("n") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("!") == iter.next());
assert!(None == iter.next());
}
#[test]
fn slice_2() {
let rope = Rope::new_from_str("Hello everyone! How are you doing, eh?");
let s = rope.slice(6, 20);
let mut iter = s.grapheme_iter();
assert_eq!(s.grapheme_count(), 14);
assert!(Some("e") == iter.next());
assert!(Some("v") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("r") == iter.next());
assert!(Some("y") == iter.next());
assert!(Some("o") == iter.next());
assert!(Some("n") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("!") == iter.next());
assert!(Some(" ") == iter.next());
assert!(Some(" ") == iter.next());
assert!(Some("H") == iter.next());
assert!(Some("o") == iter.next());
assert!(Some("w") == iter.next());
assert!(None == iter.next());
}
#[test]
fn slice_3() {
let rope = Rope::new_from_str("Hello everyone! How are you doing, eh?");
let s = rope.slice(21, 39);
let mut iter = s.grapheme_iter();
assert_eq!(s.grapheme_count(), 18);
assert!(Some("a") == iter.next());
assert!(Some("r") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some(" ") == iter.next());
assert!(Some("y") == iter.next());
assert!(Some("o") == iter.next());
assert!(Some("u") == iter.next());
assert!(Some(" ") == iter.next());
assert!(Some("d") == iter.next());
assert!(Some("o") == iter.next());
assert!(Some("i") == iter.next());
assert!(Some("n") == iter.next());
assert!(Some("g") == iter.next());
assert!(Some(",") == iter.next());
assert!(Some(" ") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("h") == iter.next());
assert!(Some("?") == iter.next());
assert!(None == iter.next());
}
#[test]
fn slice_4() {
let rope = Rope::new_from_str("Hello everyone! How are you doing, eh?");
let s = rope.slice(21, 40);
let mut iter = s.grapheme_iter();
assert_eq!(s.grapheme_count(), 18);
assert!(Some("a") == iter.next());
assert!(Some("r") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some(" ") == iter.next());
assert!(Some("y") == iter.next());
assert!(Some("o") == iter.next());
assert!(Some("u") == iter.next());
assert!(Some(" ") == iter.next());
assert!(Some("d") == iter.next());
assert!(Some("o") == iter.next());
assert!(Some("i") == iter.next());
assert!(Some("n") == iter.next());
assert!(Some("g") == iter.next());
assert!(Some(",") == iter.next());
assert!(Some(" ") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("h") == iter.next());
assert!(Some("?") == iter.next());
assert!(None == iter.next());
}
#[test]
fn slice_5() {
let rope = Rope::new_from_str("Hello everyone! How are you doing, eh?");
let s = rope.slice(21, 40);
let s2 = s.slice(3, 10);
let mut iter = s2.grapheme_iter();
assert_eq!(s.grapheme_count(), 18);
assert!(Some(" ") == iter.next());
assert!(Some("y") == iter.next());
assert!(Some("o") == iter.next());
assert!(Some("u") == iter.next());
assert!(Some(" ") == iter.next());
assert!(Some("d") == iter.next());
assert!(Some("o") == iter.next());
assert!(None == iter.next());
}
#[test]
fn slice_6() {
let rope = Rope::new_from_str("Hello everyone! How are you doing, eh?");
let s = rope.slice(15, 39);
let mut iter = s.grapheme_iter_between_indices(0, 24);
assert!(Some(" ") == iter.next());
assert!(Some(" ") == iter.next());
assert!(Some("H") == iter.next());
assert!(Some("o") == iter.next());
assert!(Some("w") == iter.next());
assert!(Some(" ") == iter.next());
assert!(Some("a") == iter.next());
assert!(Some("r") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some(" ") == iter.next());
assert!(Some("y") == iter.next());
assert!(Some("o") == iter.next());
assert!(Some("u") == iter.next());
assert!(Some(" ") == iter.next());
assert!(Some("d") == iter.next());
assert!(Some("o") == iter.next());
assert!(Some("i") == iter.next());
assert!(Some("n") == iter.next());
assert!(Some("g") == iter.next());
assert!(Some(",") == iter.next());
assert!(Some(" ") == iter.next());
assert!(Some("e") == iter.next());
assert!(Some("h") == iter.next());
assert!(Some("?") == iter.next());
assert!(None == iter.next());
}
#[test]
fn slice_7() {
let rope = Rope::new_from_str("Hello everyone! How are you doing, eh?");
let s = rope.slice(15, 39);
let mut iter = s.grapheme_iter_between_indices(10, 20);
assert!(Some("y") == iter.next());
assert!(Some("o") == iter.next());
assert!(Some("u") == iter.next());
assert!(Some(" ") == iter.next());
assert!(Some("d") == iter.next());
assert!(Some("o") == iter.next());
assert!(Some("i") == iter.next());
assert!(Some("n") == iter.next());
assert!(Some("g") == iter.next());
assert!(Some(",") == iter.next());
assert!(None == iter.next());
}
#[test]
fn line_index_to_grapheme_index_1() {