use opensmiles::{parse, AtomSymbol};
#[test]
fn parse_wildcard_atom() {
let molecule = parse("*").expect("Failed to parse wildcard");
assert_eq!(molecule.nodes().len(), 1);
assert_eq!(*molecule.nodes()[0].atom().element(), AtomSymbol::Wildcard);
}
#[test]
fn parse_wildcard_in_chain() {
let molecule = parse("C*C").expect("Failed to parse C*C");
assert_eq!(molecule.nodes().len(), 3);
assert_eq!(molecule.bonds().len(), 2);
assert_eq!(*molecule.nodes()[1].atom().element(), AtomSymbol::Wildcard);
}
#[test]
fn parse_wildcard_in_ring() {
let molecule = parse("C1*CC1").expect("Failed to parse ring with wildcard");
assert_eq!(molecule.nodes().len(), 4);
assert_eq!(molecule.bonds().len(), 4);
}
#[test]
fn parse_aspirin() {
let molecule = parse("CC(=O)Oc1ccccc1C(=O)O").expect("Failed to parse aspirin");
assert_eq!(molecule.nodes().len(), 13);
}
#[test]
fn parse_caffeine() {
let molecule = parse("Cn1cnc2c1c(=O)n(c(=O)n2C)C").expect("Failed to parse caffeine");
assert_eq!(molecule.nodes().len(), 14);
}
#[test]
fn parse_glucose() {
let molecule = parse("OCC1OC(O)C(O)C(O)C1O").expect("Failed to parse glucose");
assert_eq!(molecule.nodes().len(), 12); }
#[test]
fn parse_ethanol_explicit() {
let molecule = parse("[CH3][CH2][OH]").expect("Failed to parse explicit ethanol");
assert_eq!(molecule.nodes().len(), 3);
assert_eq!(molecule.bonds().len(), 2);
assert_eq!(molecule.nodes()[0].hydrogens(), 3);
assert_eq!(molecule.nodes()[1].hydrogens(), 2);
assert_eq!(molecule.nodes()[2].hydrogens(), 1);
}
#[test]
fn parse_acetone() {
let molecule = parse("CC(=O)C").expect("Failed to parse acetone");
assert_eq!(molecule.nodes().len(), 4);
assert_eq!(molecule.bonds().len(), 3);
}
#[test]
fn parse_acetic_acid() {
let molecule = parse("CC(=O)O").expect("Failed to parse acetic acid");
assert_eq!(molecule.nodes().len(), 4);
}
#[test]
fn parse_benzaldehyde() {
let molecule = parse("c1ccccc1C=O").expect("Failed to parse benzaldehyde");
assert_eq!(molecule.nodes().len(), 8);
}
#[test]
fn parse_aniline() {
let molecule = parse("Nc1ccccc1").expect("Failed to parse aniline");
assert_eq!(molecule.nodes().len(), 7);
}
#[test]
fn parse_phenol() {
let molecule = parse("Oc1ccccc1").expect("Failed to parse phenol");
assert_eq!(molecule.nodes().len(), 7);
}
#[test]
fn parse_empty_string() {
let result = parse("");
if let Ok(molecule) = result {
assert_eq!(molecule.nodes().len(), 0);
}
}
#[test]
fn parse_single_bond_at_start() {
let result = parse("-C");
assert!(result.is_err(), "Bond at start should be invalid");
}
#[test]
fn parse_double_bond_at_end() {
let result = parse("C=");
assert!(result.is_err(), "Bond at end should be invalid");
}
#[test]
fn parse_unclosed_bracket() {
let result = parse("[C");
assert!(result.is_err(), "Unclosed bracket should be invalid");
}
#[test]
fn parse_unclosed_ring() {
let result = parse("C1CC");
assert!(result.is_err(), "Unclosed ring should be invalid");
}
#[test]
fn parse_mismatched_ring_bonds() {
let result = parse("C=1CC-1");
assert!(
result.is_err(),
"Mismatched ring bond types should be invalid"
);
}