getopt3 2.6.1

Zero dependency command line argument parser
Documentation
/*
 * Copyright (c) Radim Kolar 2025.
 * SPDX-License-Identifier: MIT
 *
 * getopt3 library is licensed under MIT license:
 *   https://spdx.org/licenses/MIT.html
*/

use super::new;

/** converts iterable &str into String Vec */
fn toStringVec<'a>(iter: impl IntoIterator<Item = &'a str>) -> Vec<String> {
    iter.into_iter().map(|s| s.to_string()).collect()
}

#[test]
fn index_access_to_arguments() {
    let g = new(toStringVec( ["one", "-r", "optval", "two"]), "r:");
    assert!(g.is_ok());
    let g = g.unwrap();
    assert_eq!( g[0], "one" );
    assert_eq!( g[1], "two" );
    assert_eq!( g.len(), 2 );
}

#[test]
fn manual_index_access_to_arguments() {
    let g = new(toStringVec( ["one", "-r", "optval", "two"]), "r:");
    assert!(g.is_ok());
    let g = g.unwrap();
    // ACCESS 1 - get reference
    let g0_I: &str = &g[0];
    let g0_II: &str = &g[0];
    assert! ( g0_I.eq(g0_II) );
    // ACCESS 2 - get value
    // can't move value, String is not Copy
    // need to clone into String
    let g1_I: String = g[1].clone();
    let g1_II: String = g[1].clone();
    assert! ( g1_I.eq(&g1_II) );
}

#[test]
#[should_panic]
fn invalid_access_to_arguments() {
    let g = new(toStringVec( ["one", "-r", "optval", "two"]), "r:");
    assert!(g.is_ok());
    let g = g.unwrap();
    assert_eq!( g[0], "one" );
    assert_eq!( g[1], "two" );
    assert_eq!( g.len(), 2 );
    let _ = g[2].clone();
}