J'ai construit un itérateur qui génère une liste infinie de nombres premiers. Les types ressemblent à ceci:Comparaison d'un itérateur avec un tableau (de taille fixe)
pub struct Primes { … }
impl Iterator for Primes {
type Item = u32;
fn next(&mut self) -> Option<Self::Item> { … }
}
Maintenant, je veux tester si mon iterator retourne les valeurs correctes en comparant les 100 premières valeurs contre celles correctes:
#[test]
fn first_thousand() {
assert_eq!(
Primes::new().take(100),
first_100_primes
);
}
const first_100_primes: [u32; 100] = [2, 3, …, 541];
Je ne sais pas comment comparez ces valeurs. J'ai essayé de créer une tranche (first_100_primes[..]
), en recueillant les valeurs d'itérateur, mais je ne semble pas pouvoir les comparer.
Malheureusement , le trait IntoIterator n'est défini que pour [T; N] 'si' N <= 32'. Donc, je crois que ce n'est pas la même chose que de comparer les itérateurs. – Sebastian
Voir aussi [Existe-t-il un moyen intégré de comparer deux itérateurs?] (Http://stackoverflow.com/q/30540822/155423) – Shepmaster
'IntoIterator' n'est pas implémenté pour * tout * tableau, peut-être vouliez-vous dire quelque chose? autre? De toute façon, vous [pouvez obtenir un itérateur des valeurs attendues] (https://play.rust-lang.org/?gist=253547197eb8e7d678a8395602442cf2&version=stable&backtrace=0). – Shepmaster