88 lines
2.2 KiB
Rust
88 lines
2.2 KiB
Rust
|
#![allow(unused)]
|
||
|
|
||
|
#[derive(Copy, Clone)]
|
||
|
enum Nucleotide {
|
||
|
Adenine,
|
||
|
Thymine,
|
||
|
Cytosine,
|
||
|
Guanine
|
||
|
}
|
||
|
|
||
|
#[derive(Clone)]
|
||
|
struct Autosome;
|
||
|
|
||
|
#[derive(Clone)]
|
||
|
enum Allosome {
|
||
|
X(Vec<Nucleotide>),
|
||
|
Y(Vec<Nucleotide>)
|
||
|
}
|
||
|
|
||
|
impl Allosome {
|
||
|
fn is_x(&self) -> bool {
|
||
|
match *self {
|
||
|
Allosome::X(_) => true,
|
||
|
Allosome::Y(_) => false,
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[derive(Clone)]
|
||
|
struct Genome {
|
||
|
autosomes: [Autosome; 22],
|
||
|
allosomes: (Allosome, Allosome)
|
||
|
}
|
||
|
|
||
|
fn find_start_codon(strand: &[Nucleotide]) -> Option<usize> {
|
||
|
let mut reading_frame = strand.windows(3);
|
||
|
// (missing parentheses in `while let` tuple pattern)
|
||
|
while let b1, b2, b3 = reading_frame.next().expect("there should be a start codon") {
|
||
|
//~^ ERROR unexpected `,` in pattern
|
||
|
// ...
|
||
|
}
|
||
|
None
|
||
|
}
|
||
|
|
||
|
fn find_thr(strand: &[Nucleotide]) -> Option<usize> {
|
||
|
let mut reading_frame = strand.windows(3);
|
||
|
let mut i = 0;
|
||
|
// (missing parentheses in `if let` tuple pattern)
|
||
|
if let b1, b2, b3 = reading_frame.next().unwrap() {
|
||
|
//~^ ERROR unexpected `,` in pattern
|
||
|
// ...
|
||
|
}
|
||
|
None
|
||
|
}
|
||
|
|
||
|
fn is_thr(codon: (Nucleotide, Nucleotide, Nucleotide)) -> bool {
|
||
|
match codon {
|
||
|
// (missing parentheses in match arm tuple pattern)
|
||
|
Nucleotide::Adenine, Nucleotide::Cytosine, _ => true
|
||
|
//~^ ERROR unexpected `,` in pattern
|
||
|
_ => false
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fn analyze_female_sex_chromosomes(women: &[Genome]) {
|
||
|
// (missing parentheses in `for` tuple pattern)
|
||
|
for x, _barr_body in women.iter().map(|woman| woman.allosomes.clone()) {
|
||
|
//~^ ERROR unexpected `,` in pattern
|
||
|
// ...
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fn analyze_male_sex_chromosomes(men: &[Genome]) {
|
||
|
// (missing parentheses in pattern with `@` binding)
|
||
|
for x, y @ Allosome::Y(_) in men.iter().map(|man| man.allosomes.clone()) {
|
||
|
//~^ ERROR unexpected `,` in pattern
|
||
|
// ...
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fn main() {
|
||
|
let genomes = Vec::new();
|
||
|
// (missing parentheses in `let` pattern)
|
||
|
let women, men: (Vec<Genome>, Vec<Genome>) = genomes.iter().cloned()
|
||
|
//~^ ERROR unexpected `,` in pattern
|
||
|
.partition(|g: &Genome| g.allosomes.0.is_x() && g.allosomes.1.is_x());
|
||
|
}
|