vultan 1.0.1

Terminal-based, Anki-compatible spaced-repetition study tool that reads flashcards from a directory of markdown notes.
Documentation
use rand::seq::SliceRandom;

#[cfg(test)]
use rand::rngs::mock::StepRng;

#[cfg(not(test))]
use rand::thread_rng;

use crate::state::card::Card;

pub fn shuffle_cards(iterable: Vec<&Card>) -> Vec<&Card> {
    #[cfg(test)]
    let mut random_number_generator = StepRng::new(0, 0);
    #[cfg(not(test))]
    let mut random_number_generator = thread_rng();
    let mut output = iterable.to_owned();
    output.shuffle(&mut random_number_generator);
    output
}

#[cfg(test)]
mod unit_tests {

    use super::*;
    use crate::state::card::RevisionSettings;

    fn make_fake_card(path: &str) -> Card {
        Card::new(
            path.to_string(),
            vec![],
            "".to_string(),
            "".to_string(),
            RevisionSettings::default(),
        )
    }

    #[test]
    fn shuffling_cards() {
        let card_paths = ["octopus", "squid", "cuttlefish", "nautilus"];
        let cards: Vec<Card> = card_paths.iter().map(|p| make_fake_card(p)).collect();
        let expected_paths = vec!["squid", "cuttlefish", "nautilus", "octopus"];
        let actual_cards = shuffle_cards(cards.iter().collect());
        let actual_paths: Vec<&str> = actual_cards.iter().map(|c| &c.path[..]).collect();
        assert_eq!(expected_paths, actual_paths);
    }
}