mirror of
https://github.com/kmc7468/cs220.git
synced 2025-12-12 21:08:45 +00:00
Add assignment 7
This commit is contained in:
33
scripts/grade-07.sh
Executable file
33
scripts/grade-07.sh
Executable file
@@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -uo pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
# Imports library.
|
||||
BASEDIR=$(dirname "$0")
|
||||
source $BASEDIR/grade-utils.sh
|
||||
|
||||
RUNNERS=(
|
||||
"cargo"
|
||||
"cargo --release"
|
||||
"cargo_asan"
|
||||
"cargo_asan --release"
|
||||
"cargo_tsan"
|
||||
"cargo_tsan --release"
|
||||
)
|
||||
|
||||
# Lints.
|
||||
run_linters || exit 1
|
||||
|
||||
# Executes test for each runner.
|
||||
for RUNNER in "${RUNNERS[@]}"; do
|
||||
echo "Running with $RUNNER..."
|
||||
|
||||
TESTS=("--lib assignment07_grade")
|
||||
if [ $(run_tests) -ne 0 ]; then
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
exit 0
|
||||
29
src/assignments/assignment07.rs
Normal file
29
src/assignments/assignment07.rs
Normal file
@@ -0,0 +1,29 @@
|
||||
//! Assignment 7: Mastering advanced types (2/2).
|
||||
//!
|
||||
//! The primary goal of this assignment is to understand generics, traits, and lifetimes.
|
||||
//!
|
||||
//! You should fill out the `todo!()` placeholders in such a way that `/scripts/grade-07.sh` works fine.
|
||||
//! See `assignment07_grade.rs` and `/scripts/grade-07.sh` for the test script.
|
||||
|
||||
struct FindIter<'s, T: Eq> {
|
||||
query: &'s [T],
|
||||
base: &'s [T],
|
||||
curr: usize,
|
||||
}
|
||||
|
||||
impl<T: Eq> Iterator for FindIter<'_, T> {
|
||||
type Item = usize;
|
||||
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns an iterator over substring query indexes in the base.
|
||||
pub fn find<'s, T: Eq>(query: &'s [T], base: &'s [T]) -> impl 's + Iterator<Item = usize> {
|
||||
FindIter {
|
||||
query,
|
||||
base,
|
||||
curr: 0,
|
||||
}
|
||||
}
|
||||
27
src/assignments/assignment07_grade.rs
Normal file
27
src/assignments/assignment07_grade.rs
Normal file
@@ -0,0 +1,27 @@
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::super::assignment07::*;
|
||||
|
||||
#[test]
|
||||
fn test_find() {
|
||||
assert_eq!(
|
||||
find("abc".as_bytes(), "abcdabcd".as_bytes()).collect::<Vec<usize>>(),
|
||||
vec![0, 4]
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
find("aaba".as_bytes(), "aabaacaadaabaaba".as_bytes()).collect::<Vec<usize>>(),
|
||||
vec![0, 9, 12]
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
find("ababac".as_bytes(), "abababcabababcabababc".as_bytes()).collect::<Vec<usize>>(),
|
||||
vec![]
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
find("ababc".as_bytes(), "abc".as_bytes()).collect::<Vec<usize>>(),
|
||||
vec![]
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -13,3 +13,5 @@ pub mod assignment04;
|
||||
mod assignment04_grade;
|
||||
pub mod assignment06;
|
||||
mod assignment06_grade;
|
||||
pub mod assignment07;
|
||||
mod assignment07_grade;
|
||||
|
||||
Reference in New Issue
Block a user