Skip to content

Commit d68f293

Browse files
test: add unit tests for get_result() matched_peaks in Case 2
- test_get_result_returns_valid_dicts: verify peaksObj and fragmentsObj keys - test_get_result_peaks_content: verify peak tuples are non-empty and well-formed - test_get_result_precursor_mz: verify precursor_mz matches compounds - test_get_result_fragments_structure: verify fragmentsObj references known compound - test_get_result_matched_peaks: verify exact matched_peaks values after reverse_edge fix
1 parent cb9fbe7 commit d68f293

1 file changed

Lines changed: 78 additions & 0 deletions

File tree

tests/test_real_cases.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,84 @@ def test_get_edge_detail_no_side_effect(self):
185185
self.assertEqual(orig_first, after_first, "first_peak_mz was mutated by get_edge_detail")
186186
self.assertEqual(orig_second, after_second, "second_peak_mz was mutated by get_edge_detail")
187187

188+
def test_get_result_returns_valid_dicts(self):
189+
"""get_result() should return (peaksObj, fragmentsObj) with correct keys and types."""
190+
peaksObj, fragmentsObj = self.mf.get_result()
191+
192+
# peaksObj should be a dict with the expected keys
193+
self.assertIsInstance(peaksObj, dict)
194+
expected_peaks_keys = [
195+
"main_compound_peaks", "mod_compound_peaks", "matched_peaks",
196+
"main_precursor_mz", "mod_precursor_mz",
197+
]
198+
for key in expected_peaks_keys:
199+
self.assertIn(key, peaksObj, f"peaksObj missing key: {key}")
200+
201+
# fragmentsObj should be a dict with the expected keys
202+
self.assertIsInstance(fragmentsObj, dict)
203+
expected_frags_keys = ["frags_map", "structure", "peaks", "Precursor_MZ"]
204+
for key in expected_frags_keys:
205+
self.assertIn(key, fragmentsObj, f"fragmentsObj missing key: {key}")
206+
207+
def test_get_result_peaks_content(self):
208+
"""get_result() peaks lists should be non-empty tuples of length 2."""
209+
peaksObj, _ = self.mf.get_result()
210+
211+
self.assertGreater(len(peaksObj["main_compound_peaks"]), 0)
212+
self.assertGreater(len(peaksObj["mod_compound_peaks"]), 0)
213+
214+
# Each peak should be a (mz, intensity) pair
215+
for peak in peaksObj["main_compound_peaks"]:
216+
self.assertEqual(len(peak), 2)
217+
for peak in peaksObj["mod_compound_peaks"]:
218+
self.assertEqual(len(peak), 2)
219+
220+
def test_get_result_precursor_mz(self):
221+
"""get_result() precursor_mz values should match the compounds."""
222+
peaksObj, fragmentsObj = self.mf.get_result()
223+
224+
self.assertAlmostEqual(peaksObj["main_precursor_mz"],
225+
self.known.spectrum.precursor_mz)
226+
self.assertAlmostEqual(peaksObj["mod_precursor_mz"],
227+
self.unknown.spectrum.precursor_mz)
228+
self.assertAlmostEqual(fragmentsObj["Precursor_MZ"],
229+
self.known.spectrum.precursor_mz)
230+
231+
def test_get_result_fragments_structure(self):
232+
"""fragmentsObj structure and peaks should reference the known compound."""
233+
from rdkit import Chem
234+
peaksObj, fragmentsObj = self.mf.get_result()
235+
236+
# Compare by SMILES since RDKit Mol objects may be copied internally
237+
self.assertEqual(
238+
Chem.MolToSmiles(fragmentsObj["structure"]),
239+
Chem.MolToSmiles(self.known.structure),
240+
)
241+
self.assertEqual(fragmentsObj["peaks"], peaksObj["main_compound_peaks"])
242+
243+
def test_get_result_matched_peaks(self):
244+
"""get_result() matched_peaks should contain expected pairs (unknown_mz, known_mz)."""
245+
peaksObj, _ = self.mf.get_result()
246+
matched = peaksObj["matched_peaks"]
247+
248+
self.assertIsInstance(matched, list)
249+
self.assertEqual(len(matched), 9)
250+
251+
expected_matched_peaks = [
252+
(409304992, 313139007),
253+
(308160003, 308160003),
254+
(209190002, 113023002),
255+
(310273986, 214106994),
256+
(102091003, 102091003),
257+
(84081001, 84080001),
258+
(390165008, 390165985),
259+
(201123001, 201123001),
260+
(165102005, 165102005),
261+
]
262+
263+
self.assertEqual(matched, expected_matched_peaks,
264+
"matched_peaks do not match expected values")
265+
188266

189267
if __name__ == "__main__":
190268
unittest.main()

0 commit comments

Comments
 (0)