use cxx::let_cxx_string; #[test] fn test_descriptors() { let_cxx_string!(smile = "c1ccccc1C(=O)NC"); let mol = rdk_sys::ro_mol_ffi::smiles_to_mol(&smile).unwrap(); let properties = rdk_sys::descriptors_ffi::new_properties(); let names = rdk_sys::descriptors_ffi::get_property_names(properties.clone()); let names = names .into_iter() .map(|stringy| stringy.to_string()) .collect::>(); let computed = rdk_sys::descriptors_ffi::compute_properties(properties, mol); let computed = computed .into_iter() .map(|floaty| *floaty) .collect::>(); let expected_names = vec![ "exactmw", "amw", "lipinskiHBA", "lipinskiHBD", "NumRotatableBonds", "NumHBD", "NumHBA", "NumHeavyAtoms", "NumAtoms", "NumHeteroatoms", "NumAmideBonds", "FractionCSP3", "NumRings", "NumAromaticRings", "NumAliphaticRings", "NumSaturatedRings", "NumHeterocycles", "NumAromaticHeterocycles", "NumSaturatedHeterocycles", "NumAliphaticHeterocycles", "NumSpiroAtoms", "NumBridgeheadAtoms", "NumAtomStereoCenters", "NumUnspecifiedAtomStereoCenters", "labuteASA", "tpsa", "CrippenClogP", "CrippenMR", "chi0v", "chi1v", "chi2v", "chi3v", "chi4v", "chi0n", "chi1n", "chi2n", "chi3n", "chi4n", "hallKierAlpha", "kappa1", "kappa2", "kappa3", "Phi", ]; let expected_computed = vec![ 135.068413908, 135.166, 2.0, 1.0, 1.0, 1.0, 1.0, 10.0, 19.0, 2.0, 1.0, 0.125, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 59.872671631941984, 29.1, 1.0462, 39.83220000000001, 5.794999636411992, 3.114807747754891, 1.2630398384597699, 1.2630398384597699, 0.733865134927391, 5.794999636411992, 3.114807747754891, 1.2630398384597699, 1.2630398384597699, 0.733865134927391, -1.31, 6.805074798619103, 3.011779444695785, 1.34501586290279, 2.049538439809832, ]; assert_eq!(names, expected_names); assert_eq!(computed, expected_computed); }