use opensmiles::{parse, AtomSymbol, BondType, OrganicAtom};
#[test]
fn parse_methane() {
let molecule = parse("C").expect("Failed to parse methane");
assert_eq!(molecule.nodes().len(), 1);
assert_eq!(molecule.bonds().len(), 0);
let node = &molecule.nodes()[0];
assert_eq!(*node.atom().element(), AtomSymbol::Organic(OrganicAtom::C));
assert_eq!(node.atom().charge(), 0);
assert_eq!(node.atom().isotope(), None);
assert!(!node.aromatic());
assert_eq!(node.class(), None);
assert_eq!(node.hydrogens(), 4);
}
#[test]
fn parse_ethane() {
let molecule = parse("CC").expect("Failed to parse ethane");
assert_eq!(molecule.nodes().len(), 2);
assert_eq!(molecule.bonds().len(), 1);
let node0 = &molecule.nodes()[0];
assert_eq!(*node0.atom().element(), AtomSymbol::Organic(OrganicAtom::C));
assert_eq!(node0.atom().charge(), 0);
assert_eq!(node0.atom().isotope(), None);
assert!(!node0.aromatic());
assert_eq!(node0.class(), None);
assert_eq!(node0.hydrogens(), 3);
let node1 = &molecule.nodes()[1];
assert_eq!(*node1.atom().element(), AtomSymbol::Organic(OrganicAtom::C));
assert_eq!(node1.atom().charge(), 0);
assert_eq!(node1.atom().isotope(), None);
assert!(!node1.aromatic());
assert_eq!(node1.class(), None);
assert_eq!(node1.hydrogens(), 3);
let bond = &molecule.bonds()[0];
assert_eq!(bond.kind(), BondType::Simple);
assert_eq!(bond.source(), 0);
assert_eq!(bond.target(), 1);
}
#[test]
fn parse_ethanol() {
let molecule = parse("CCO").expect("Failed to parse ethanol");
assert_eq!(molecule.nodes().len(), 3);
assert_eq!(molecule.bonds().len(), 2);
let node0 = &molecule.nodes()[0];
assert_eq!(*node0.atom().element(), AtomSymbol::Organic(OrganicAtom::C));
assert_eq!(node0.atom().charge(), 0);
assert_eq!(node0.atom().isotope(), None);
assert!(!node0.aromatic());
assert_eq!(node0.class(), None);
assert_eq!(node0.hydrogens(), 3);
let node1 = &molecule.nodes()[1];
assert_eq!(*node1.atom().element(), AtomSymbol::Organic(OrganicAtom::C));
assert_eq!(node1.atom().charge(), 0);
assert_eq!(node1.atom().isotope(), None);
assert!(!node1.aromatic());
assert_eq!(node1.class(), None);
assert_eq!(node1.hydrogens(), 2);
let node2 = &molecule.nodes()[2];
assert_eq!(*node2.atom().element(), AtomSymbol::Organic(OrganicAtom::O));
assert_eq!(node2.atom().charge(), 0);
assert_eq!(node2.atom().isotope(), None);
assert!(!node2.aromatic());
assert_eq!(node2.class(), None);
assert_eq!(node2.hydrogens(), 1);
let bond0 = &molecule.bonds()[0];
assert_eq!(bond0.kind(), BondType::Simple);
assert_eq!(bond0.source(), 0);
assert_eq!(bond0.target(), 1);
let bond1 = &molecule.bonds()[1];
assert_eq!(bond1.kind(), BondType::Simple);
assert_eq!(bond1.source(), 1);
assert_eq!(bond1.target(), 2);
}
#[test]
fn parse_chloromethane() {
let molecule = parse("CCl").expect("Failed to parse chloromethane");
assert_eq!(molecule.nodes().len(), 2);
assert_eq!(molecule.bonds().len(), 1);
let node0 = &molecule.nodes()[0];
assert_eq!(*node0.atom().element(), AtomSymbol::Organic(OrganicAtom::C));
assert_eq!(node0.atom().charge(), 0);
assert_eq!(node0.atom().isotope(), None);
assert!(!node0.aromatic());
assert_eq!(node0.class(), None);
assert_eq!(node0.hydrogens(), 3);
let node1 = &molecule.nodes()[1];
assert_eq!(
*node1.atom().element(),
AtomSymbol::Organic(OrganicAtom::Cl)
);
assert_eq!(node1.atom().charge(), 0);
assert_eq!(node1.atom().isotope(), None);
assert!(!node1.aromatic());
assert_eq!(node1.class(), None);
assert_eq!(node1.hydrogens(), 0);
let bond = &molecule.bonds()[0];
assert_eq!(bond.kind(), BondType::Simple);
assert_eq!(bond.source(), 0);
assert_eq!(bond.target(), 1);
}