Mentions légales du service

Skip to content
Snippets Groups Projects
main.rs 1.79 KiB
Newer Older
mod undirected_graph;
Ricardo Buring's avatar
Ricardo Buring committed
use std::fs::File;
Ricardo Buring's avatar
Ricardo Buring committed
fn main() -> std::io::Result<()> {
    let args: Vec<String> = env::args().collect();

Ricardo Buring's avatar
Ricardo Buring committed
    if args.len() != 3 {
        eprintln!(
            "Usage: {} <number-of-spokes-in-wheel> <sparse-matrix-filename>",
            args[0]
        );
        process::exit(1);
    }

    let num_spokes_maybe: Result<usize, std::num::ParseIntError> = args[1].parse::<usize>();
    if num_spokes_maybe.is_err() {
Ricardo Buring's avatar
Ricardo Buring committed
        eprintln!("Error parsing the first argument as a natural number.");
        process::exit(1);
    }
    let num_spokes: usize = num_spokes_maybe.unwrap();

    if num_spokes < 2 {
        eprintln!("Error: A wheel graph without tadpoles must have at least two spokes.");
        process::exit(1);
    }

    if num_spokes % 2 == 0 {
        eprintln!("Error: The {}-wheel graph has an automorphism that induces an odd permutation on edges, so it is equal to zero in the graph complex.", num_spokes);
Ricardo Buring's avatar
Ricardo Buring committed
    let sparse_matrix_filename: &String = &args[2];
    let sparse_matrix_file_res: Result<File, std::io::Error> = File::create(sparse_matrix_filename);
    if sparse_matrix_file_res.is_err() {
        eprintln!("Error opening file: {}", sparse_matrix_filename);
        process::exit(1);
    }
    let mut sparse_matrix_file: File = sparse_matrix_file_res.unwrap();

    let result: Result<(usize, usize, usize), std::io::Error> =
        expand_n_contract::expand_n_contract(num_spokes, &mut sparse_matrix_file);
    match result {
        Ok((rows, columns, num_nonzeros)) => {
            eprintln!(
                "Sparse {} x {} matrix with {} non-zero entries",
                rows, columns, num_nonzeros
            );
            Ok(())
Ricardo Buring's avatar
Ricardo Buring committed
}