mirror of
https://github.com/kmc7468/cs220.git
synced 2025-12-12 21:08:45 +00:00
Merge branch 'main' into 'main'
assingment11: linked_list: fix skeleton & test case See merge request kaist-cp-class/cs220-private!29
This commit is contained in:
@@ -66,7 +66,7 @@ impl<T: Debug> SinglyLinkedList<T> {
|
||||
}
|
||||
|
||||
/// Convert the current list into a vector.
|
||||
pub fn as_vec(&self) -> Vec<T> {
|
||||
pub fn into_vec(self) -> Vec<T> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
@@ -80,36 +80,7 @@ impl<T: Debug> SinglyLinkedList<T> {
|
||||
/// # Examples
|
||||
///
|
||||
/// `self`: `[1, 2]`, `f`: `|x| x + 1` ==> `[2, 3]`
|
||||
pub fn map<F: Fn(T) -> T>(&mut self, f: F) {
|
||||
todo!()
|
||||
}
|
||||
|
||||
/// Insert given list `another` at the specified index `idx`.
|
||||
/// If `idx` is out-of-bound of `self`, append `another` at the end of `self`.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// `self`: `[1, 2]`, `another`: `[3, 4]`, `idx`: `1` ==> `[1, 3, 4, 2]`
|
||||
/// `self`: `[1, 2]`, `another`: `[3, 4]`, `idx`: `5` ==> `[1, 2, 3, 4]`
|
||||
pub fn insert(&mut self, another: &Self, idx: usize) {
|
||||
todo!()
|
||||
}
|
||||
|
||||
/// Reverse the list in a chunk of size `n`.
|
||||
/// If `n == 0`, do nothing.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// `self`: `[1, 2, 3, 4, 5, 6, 7, 8, 9]`, `n`: `3`
|
||||
/// // each chunk of size `3`: `[1, 2, 3]`, `[4, 5, 6]`, `[7, 8, 9]`
|
||||
/// // reversed sequence of chunks: `[7, 8, 9]`, `[4, 5, 6]`, `[1, 2, 3]`
|
||||
/// ==> `[7, 8, 9, 4, 5, 6, 1, 2, 3]`,
|
||||
///
|
||||
/// `self`: `[1, 2, 3, 4, 5, 6, 7, 8, 9]`, `n`: `4`
|
||||
/// // each chunk of size `4`: `[1, 2, 3, 4]`, `[5, 6, 7, 8]`, `[9]`
|
||||
/// // reversed sequence of chunks: `[9]`, `[5, 6, 7, 8]`, `[1, 2, 3, 4]`
|
||||
/// ==> `[9, 5, 6, 7, 8, 1, 2, 3, 4]`
|
||||
pub fn chunk_reverse(&mut self, n: usize) {
|
||||
pub fn map<F: Fn(T) -> T>(self, f: F) -> Self {
|
||||
todo!()
|
||||
}
|
||||
|
||||
@@ -122,7 +93,10 @@ impl<T: Debug> SinglyLinkedList<T> {
|
||||
/// // each adjacent pair of elements: `(1, 2)`, `(2, 3)`, `(3, 4)`
|
||||
/// // apply `f` to each pair: `f(1, 2) == 3`, `f(2, 3) == 5`, `f(3, 4) == 7`
|
||||
/// ==> `[3, 5, 7]`
|
||||
pub fn pair_map<F: Fn(T, T) -> T>(&mut self, f: F) {
|
||||
pub fn pair_map<F: Fn(T, T) -> T>(self, f: F) -> Self
|
||||
where
|
||||
T: Clone,
|
||||
{
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,10 +24,10 @@ mod test_linked_list {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_from_as_vec() {
|
||||
assert_eq!(SinglyLinkedList::<i32>::new().as_vec(), vec![]);
|
||||
fn test_from_into_vec() {
|
||||
assert_eq!(SinglyLinkedList::<i32>::new().into_vec(), vec![]);
|
||||
assert_eq!(
|
||||
SinglyLinkedList::from_vec(vec![1, 2, 3]).as_vec(),
|
||||
SinglyLinkedList::from_vec(vec![1, 2, 3]).into_vec(),
|
||||
vec![1, 2, 3]
|
||||
);
|
||||
}
|
||||
@@ -40,68 +40,29 @@ mod test_linked_list {
|
||||
|
||||
#[test]
|
||||
fn test_map() {
|
||||
let mut list = SinglyLinkedList::from_vec(vec![1, 2, 3]);
|
||||
let incr = |x: i32| x + 1;
|
||||
list.map(incr);
|
||||
assert_eq!(list.as_vec(), vec![2, 3, 4]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_insert() {
|
||||
let mut list1 = SinglyLinkedList::from_vec(vec![1, 2, 3]);
|
||||
let mut list2 = SinglyLinkedList::from_vec(vec![1, 2, 3]);
|
||||
let mut list3 = SinglyLinkedList::from_vec(vec![1, 2, 3]);
|
||||
let list4 = SinglyLinkedList::from_vec(vec![4, 5, 6]);
|
||||
|
||||
list1.insert(&list4, 0);
|
||||
assert_eq!(list1.as_vec(), vec![4, 5, 6, 1, 2, 3]);
|
||||
|
||||
list2.insert(&list4, 1);
|
||||
assert_eq!(list2.as_vec(), vec![1, 4, 5, 6, 2, 3]);
|
||||
|
||||
list3.insert(&list4, 4);
|
||||
assert_eq!(list3.as_vec(), vec![1, 2, 3, 4, 5, 6]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_chunk_reverse() {
|
||||
let mut list1 = SinglyLinkedList::from_vec(vec![1, 2, 3, 4, 5, 6, 7, 8, 9]);
|
||||
list1.chunk_reverse(3);
|
||||
assert_eq!(list1.as_vec(), vec![7, 8, 9, 3, 4, 5, 1, 2, 3]);
|
||||
|
||||
let mut list2 = SinglyLinkedList::from_vec(vec![1, 2, 3, 4, 5, 6, 7, 8]);
|
||||
list2.chunk_reverse(3);
|
||||
assert_eq!(list2.as_vec(), vec![7, 8, 4, 5, 6, 1, 2, 3]);
|
||||
|
||||
let mut list3 = SinglyLinkedList::from_vec(vec![1, 2, 3]);
|
||||
list3.chunk_reverse(4);
|
||||
assert_eq!(list3.as_vec(), vec![1, 2, 3]);
|
||||
|
||||
let mut list4 = SinglyLinkedList::from_vec(vec![1, 2, 3, 4]);
|
||||
list4.chunk_reverse(1);
|
||||
assert_eq!(list4.as_vec(), vec![4, 3, 2, 1]);
|
||||
|
||||
let mut list5 = SinglyLinkedList::from_vec(vec![1, 2, 3, 4]);
|
||||
list4.chunk_reverse(0);
|
||||
assert_eq!(list4.as_vec(), vec![1, 2, 3, 4]);
|
||||
let list = SinglyLinkedList::from_vec(vec![1, 2, 3]);
|
||||
let list_ = list.map(|x: i32| x + 1);
|
||||
assert_eq!(list_.into_vec(), vec![2, 3, 4]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_pair_map() {
|
||||
let mut list = SinglyLinkedList::from_vec(vec![1, 2, 3, 4, 5, 6, 7, 8, 9]);
|
||||
let add = |x: i32, y: i32| x + y;
|
||||
|
||||
list.pair_map(add);
|
||||
assert_eq!(list.as_vec(), vec![3, 5, 7, 9, 11, 13, 15, 17]);
|
||||
let list1 = SinglyLinkedList::from_vec(vec![1, 2, 3, 4, 5, 6, 7, 8, 9]).pair_map(add);
|
||||
let vec1 = list1.into_vec();
|
||||
assert_eq!(vec1.clone(), vec![3, 5, 7, 9, 11, 13, 15, 17]);
|
||||
|
||||
list.pair_map(add);
|
||||
assert_eq!(list.as_vec(), vec![8, 12, 16, 20, 24, 28, 32]);
|
||||
let list2 = SinglyLinkedList::from_vec(vec1).pair_map(add);
|
||||
let vec2 = list2.into_vec();
|
||||
assert_eq!(vec2.clone(), vec![8, 12, 16, 20, 24, 28, 32]);
|
||||
|
||||
list.pair_map(add);
|
||||
assert_eq!(list.as_vec(), vec![20, 28, 36, 44, 52, 60]);
|
||||
let list3 = SinglyLinkedList::from_vec(vec2).pair_map(add);
|
||||
let vec3 = list3.into_vec();
|
||||
assert_eq!(vec3.clone(), vec![20, 28, 36, 44, 52, 60]);
|
||||
|
||||
list.pair_map(add);
|
||||
assert_eq!(list.as_vec(), vec![48, 64, 80, 96, 112]);
|
||||
let list4 = SinglyLinkedList::from_vec(vec3).pair_map(add);
|
||||
assert_eq!(list4.into_vec(), vec![48, 64, 80, 96, 112]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -115,7 +76,7 @@ mod test_linked_list {
|
||||
let list_list = SinglyLinkedList::from_vec(vec![list1, list2, list3, list4, list5]);
|
||||
|
||||
assert_eq!(
|
||||
list_list.flatten().as_vec(),
|
||||
list_list.flatten().into_vec(),
|
||||
vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user