Three-Molecule SDfile Library: Multi-Record (.sdf)
Three molecules of different sizes in one SDfile, each with its own connection table and four data fields, separated by the $$$$ terminator. It is the fixture for streaming SDfile readers that have to split on the terminator rather than load the whole file.
methane
NovusEx 3D synthetic idealised geometry
Idealised geometry, synthetic fixture.
5 4 0 0 0 0 0 0 0 0999 V2000
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.6290 0.6290 0.6290 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.6290 -0.6290 0.6290 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.6290 0.6290 -0.6290 H 0 0 0 0 0 0 0 0 0 0 0 0
0.6290 -0.6290 -0.6290 H 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
1 3 1 0
1 4 1 0
1 5 1 0
M END
> <NAME>
methane
> <FORMULA>
CH4
> <MOLECULAR_WEIGHT>
16.043
> <SMILES>
C
$$$$
water
NovusEx 3D synthetic idealised geometry
Idealised geometry, synthetic fixture.
3 2 0 0 0 0 0 0 0 0999 V2000
0.0000 0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
0.7570 0.5860 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.7570 0.5860 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
1 3 1 0
M END
> <NAME>
water
> <FORMULA>
H2O
> <MOLECULAR_WEIGHT>
18.015
> <SMILES>
O
$$$$Specifications
- Records
- 3
- Molecules
- methane, water, ethanol
- Atoms Per Record
- 5, 3, 9
- Data Fields Per Record
- 4
- Record Terminator
- $$$$
- Total Atoms
- 17
Testing contract
Expected to pass- Scenario
- Stream the file record by record and report the atom count and NAME field of each without loading it whole.
- Expected result
- Three records are found in order (methane with 5 atoms, water with 3 and ethanol with 9), and each terminates on its own $$$$ line.
What is a .sdf file?
SDF (Structure-Data File) is MDL's multi-record chemistry format. Each record is a molfile (a counts line, an atom block, and a bond block) followed by tagged data fields written as `> <NAME>` lines with their values, and terminated by a `$$$$` delimiter. It is how compound libraries with per-molecule properties are shipped between cheminformatics tools.
How to use this file
Use an example .sdf file to test cheminformatics readers and property extractors, verifying record splitting on the `$$$$` delimiter, that data fields are associated with the right structure, and that a malformed record does not consume the rest of the file.
How to use this file for testing
“Three-Molecule SDfile Library: Multi-Record (.sdf)” is a deterministic Testaroo fixture for Scientific data, Editor testing, Data import. Citation catalogs (BibTeX, RIS), chemistry structures (MDL Molfile, PDB), and gridded binary data (NetCDF, FITS), for testing reference managers, molecule viewers, and scientific-data loaders.
Documented properties for this file: 3 records. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.
Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such, expect parsers to fail loudly rather than silently accept them.
Scientific fixtures are small, valid, and fully synthetic, no real organism, patient, sample, or observation. Point your parser or loader at the file and check it reads the documented records, variables, or headers; binary formats ship a readable twin or metadata listing for comparison.
Generated by generation/scientific.py. Free for any use, no attribution required, license.
Related files
- tsvGravimetric Mass: TSV With Bracketed Units and Spaces in Headers (.tsv)Ten weighings as tab-separated values with headers that contain spaces, brackets and parentheses, 'u(mass) [g]', the way balance software actually writes them. Column names like these break naive slug-based header handling long before the numbers become a problem.

- csvUnits on a Second Header Row: Not Data (.csv)The same instrument export with units on a second header row instead of inside the column names, which is how a great many laboratory instruments write CSV. An importer that treats row two as data types every measurement column as text and then quietly refuses to plot anything.

- cifCIF Parser Edge Cases: Quotes, Text Fields and Wrapped Loops (.cif)A CIF built entirely out of the constructs that break naive parsers: quoted values containing apostrophes and hashes, a semicolon-delimited multi-line text field, the distinct '?' and '.' markers, a standard uncertainty written as 1.2345(7), and a loop whose rows wrap across lines. Every one of them is legal CIF.

- xyzEthanol Rotation: Multi-Frame XYZ Trajectory (.xyz)Five concatenated XYZ frames of the same ethanol molecule rotated rigidly about z in 15-degree steps, which keeps every interatomic distance constant. Frames are separated only by the next atom-count line, so a reader that expects a blank-line delimiter stops after frame one.

- molEthanol: MDL Molfile V2000 (.mol)Ethanol as a V2000 molfile with fixed-column 3D coordinates, a nine-atom counts line and an eight-bond block. The column widths are part of the format rather than a convention, so it is a genuine test of fixed-width parsing rather than of whitespace splitting.

- sdfEthanol: SDfile With Data Fields (.sdf)An SDfile wrapping the identical ethanol molfile plus five tagged data fields and the mandatory $$$$ terminator. The property block syntax (a header line, a value and a blank line) is where SDfile parsers usually diverge from molfile parsers.
