/* Ċ Ġ* Ġ ĠCopyright Ġ 2 0 2 0 ĠJames ĠAnd reas Ċ Ġ* Ġ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* ĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ġ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġ Ġlimitations Ġunder Ġthe ĠLicense Ċ Ġ*/ Ċ Ċ package Ġcom . kot mol . pdb Parser Ċ Ċ import Ġorg . junit . jupiter . api . Assertions .* Ċ import Ġorg . junit . jupiter . api . DisplayName Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . io . ByteArray InputStream Ċ Ċ // Ġhttps :// blog . jetbrains . com / idea / 2 0 1 6 / 0 8 / using - junit - 5 - in - intellij - idea / Ċ Ċ internal Ġclass ĠB ond Gu an ine Test 0 1 Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ 1 B NA . pdb ĊĠĠĠĠ Ġ* ĠĠ ĠJust Ġthe Ġfirst ĠGu an ine Ġentry Ġis Ġused Ġin Ġthis Ġtest . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġlateinit Ġvar Ġstr Ġ: ĠByteArrayInputStream ĊĠĠĠ Ġlateinit Ġvar Ġa Model Test Ġ: ĠString ĊĠĠĠ Ġ@ org . junit . jupiter . api . BeforeEach ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthe Model String Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ 1 ĠĠĠĠĠĠĠĠĠ 2 ĠĠĠĠĠĠĠĠĠ 3 ĠĠĠĠĠĠĠĠĠ 4 ĠĠĠĠĠĠĠĠĠ 5 ĠĠĠĠĠĠĠĠĠ 6 ĠĠĠĠĠĠĠĠĠ 7 Ċ 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 """ ĊĠĠĠĠĠĠĠ Ġa Model Test Ġ= Ġ""" Ċ ATOM ĠĠĠĠĠ 1 7 Ġ ĠP ĠĠĠ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 2 2 . 4 0 9 ĠĠ 3 1 . 2 8 6 ĠĠ 2 1 . 4 8 3 ĠĠ 1 . 0 0 Ġ 5 8 . 8 5 ĠĠĠĠĠĠĠĠĠĠ ĠP ĠĠ Ċ ATOM ĠĠĠĠĠ 1 8 Ġ ĠOP 1 Ġ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 2 3 . 5 3 6 ĠĠ 3 2 . 1 5 7 ĠĠ 2 1 . 8 5 1 ĠĠ 1 . 0 0 Ġ 5 7 . 8 2 ĠĠĠĠĠĠĠĠĠĠ ĠO ĠĠ Ċ ATOM ĠĠĠĠĠ 1 9 Ġ ĠOP 2 Ġ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 2 1 . 8 2 2 ĠĠ 3 1 . 4 5 9 ĠĠ 2 0 . 1 3 9 ĠĠ 1 . 0 0 Ġ 7 8 . 3 3 ĠĠĠĠĠĠĠĠĠĠ ĠO ĠĠ Ċ ATOM ĠĠĠĠĠ 2 0 Ġ ĠO 5 ' Ġ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 2 2 . 8 4 0 ĠĠ 2 9 . 7 5 1 ĠĠ 2 1 . 4 9 8 ĠĠ 1 . 0 0 Ġ 4 0 . 3 6 ĠĠĠĠĠĠĠĠĠĠ ĠO ĠĠ Ċ ATOM ĠĠĠĠĠ 2 1 Ġ ĠC 5 ' Ġ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 2 3 . 5 4 3 ĠĠ 2 9 . 1 7 5 ĠĠ 2 2 . 5 9 4 ĠĠ 1 . 0 0 Ġ 4 7 . 1 9 ĠĠĠĠĠĠĠĠĠĠ ĠC ĠĠ Ċ ATOM ĠĠĠĠĠ 2 2 Ġ ĠC 4 ' Ġ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 2 3 . 4 9 4 ĠĠ 2 7 . 7 0 9 ĠĠ 2 2 . 2 7 9 ĠĠ 1 . 0 0 Ġ 4 7 . 8 1 ĠĠĠĠĠĠĠĠĠĠ ĠC ĠĠ Ċ ATOM ĠĠĠĠĠ 2 3 Ġ ĠO 4 ' Ġ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 2 2 . 1 9 3 ĠĠ 2 7 . 2 5 2 ĠĠ 2 2 . 6 7 4 ĠĠ 1 . 0 0 Ġ 3 8 . 7 6 ĠĠĠĠĠĠĠĠĠĠ ĠO ĠĠ Ċ ATOM ĠĠĠĠĠ 2 4 Ġ ĠC 3 ' Ġ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 2 3 . 6 9 3 ĠĠ 2 7 . 3 2 5 ĠĠ 2 0 . 8 0 7 ĠĠ 1 . 0 0 Ġ 2 8 . 5 8 ĠĠĠĠĠĠĠĠĠĠ ĠC ĠĠ Ċ ATOM ĠĠĠĠĠ 2 5 Ġ ĠO 3 ' Ġ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 2 4 . 7 2 3 ĠĠ 2 6 . 3 2 0 ĠĠ 2 0 . 6 5 3 ĠĠ 1 . 0 0 Ġ 4 0 . 4 4 ĠĠĠĠĠĠĠĠĠĠ ĠO ĠĠ Ċ ATOM ĠĠĠĠĠ 2 6 Ġ ĠC 2 ' Ġ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 2 2 . 2 7 3 ĠĠ 2 6 . 8 8 5 ĠĠ 2 0 . 4 1 6 ĠĠ 1 . 0 0 Ġ 2 1 . 1 4 ĠĠĠĠĠĠĠĠĠĠ ĠC ĠĠ Ċ ATOM ĠĠĠĠĠ 2 7 Ġ ĠC 1 ' Ġ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 2 1 . 7 2 1 ĠĠ 2 6 . 3 0 4 ĠĠ 2 1 . 7 1 6 ĠĠ 1 . 0 0 Ġ 3 3 . 9 5 ĠĠĠĠĠĠĠĠĠĠ ĠC ĠĠ Ċ ATOM ĠĠĠĠĠ 2 8 Ġ ĠN 9 ĠĠ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 2 0 . 2 3 7 ĠĠ 2 6 . 4 7 0 ĠĠ 2 1 . 7 8 0 ĠĠ 1 . 0 0 Ġ 3 4 . 0 0 ĠĠĠĠĠĠĠĠĠĠ ĠN ĠĠ Ċ ATOM ĠĠĠĠĠ 2 9 Ġ ĠC 8 ĠĠ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 1 9 . 5 2 6 ĠĠ 2 7 . 5 8 4 ĠĠ 2 1 . 4 2 9 ĠĠ 1 . 0 0 Ġ 3 6 . 4 7 ĠĠĠĠĠĠĠĠĠĠ ĠC ĠĠ Ċ ATOM ĠĠĠĠĠ 3 0 Ġ ĠN 7 ĠĠ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 1 8 . 2 0 7 ĠĠ 2 7 . 4 5 5 ĠĠ 2 1 . 6 3 6 ĠĠ 1 . 0 0 Ġ 3 2 . 3 7 ĠĠĠĠĠĠĠĠĠĠ ĠN ĠĠ Ċ ATOM ĠĠĠĠĠ 3 1 Ġ ĠC 5 ĠĠ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 1 8 . 0 8 3 ĠĠ 2 6 . 2 1 2 ĠĠ 2 2 . 1 4 2 ĠĠ 1 . 0 0 Ġ 1 5 . 0 6 ĠĠĠĠĠĠĠĠĠĠ ĠC ĠĠ Ċ ATOM ĠĠĠĠĠ 3 2 Ġ ĠC 6 ĠĠ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 1 6 . 9 0 4 ĠĠ 2 5 . 5 2 5 ĠĠ 2 2 . 5 4 5 ĠĠ 1 . 0 0 Ġ 1 1 . 8 8 ĠĠĠĠĠĠĠĠĠĠ ĠC ĠĠ Ċ ATOM ĠĠĠĠĠ 3 3 Ġ ĠO 6 ĠĠ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 1 5 . 7 3 9 ĠĠ 2 5 . 9 1 6 ĠĠ 2 2 . 5 1 8 ĠĠ 1 . 0 0 Ġ 2 1 . 3 0 ĠĠĠĠĠĠĠĠĠĠ ĠO ĠĠ Ċ ATOM ĠĠĠĠĠ 3 4 Ġ ĠN 1 ĠĠ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 1 7 . 1 9 7 ĠĠ 2 4 . 2 7 9 ĠĠ 2 3 . 0 3 7 ĠĠ 1 . 0 0 Ġ 1 5 . 4 4 ĠĠĠĠĠĠĠĠĠĠ ĠN ĠĠ Ċ ATOM ĠĠĠĠĠ 3 5 Ġ ĠC 2 ĠĠ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 1 8 . 4 3 4 ĠĠ 2 3 . 7 1 7 ĠĠ 2 3 . 1 5 5 ĠĠ 1 . 0 0 ĠĠ 9 . 6 3 ĠĠĠĠĠĠĠĠĠĠ ĠC ĠĠ Ċ ATOM ĠĠĠĠĠ 3 6 Ġ ĠN 2 ĠĠ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 1 8 . 5 0 8 ĠĠ 2 2 . 4 5 6 ĠĠ 2 3 . 6 6 8 ĠĠ 1 . 0 0 Ġ 1 6 . 6 9 ĠĠĠĠĠĠĠĠĠĠ ĠN ĠĠ Ċ ATOM ĠĠĠĠĠ 3 7 Ġ ĠN 3 ĠĠ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 1 9 . 5 3 7 ĠĠ 2 4 . 3 6 0 ĠĠ 2 2 . 7 7 0 ĠĠ 1 . 0 0 Ġ 3 0 . 9 8 ĠĠĠĠĠĠĠĠĠĠ ĠN ĠĠ Ċ ATOM ĠĠĠĠĠ 3 8 Ġ ĠC 4 ĠĠ ĠDG ĠA ĠĠĠ 2 ĠĠĠĠĠĠ 1 9 . 2 9 0 ĠĠ 2 5 . 5 9 4 ĠĠ 2 2 . 2 7 4 ĠĠ 1 . 0 0 Ġ 1 8 . 5 6 ĠĠĠĠĠĠĠĠĠĠ ĠC ĠĠ Ċ TER ĠĠĠĠĠĠ 3 9 ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ċ END ĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġstr Ġ= Ġa Model Test . byte InputStream () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠGu an ine : ĊĠĠĠĠ Ġ* ĠParameters Ġfor Ġall Ġof Ġthese Ġforce Ġfields Ġmay Ġbe Ġdownloaded Ġfrom Ġthe ĠM acker ell Ġwebsite Ġfor Ġfree . Ċ * Ġhttp :// m acker ell . um ary land . edu / char mm _ ff . s html ĊĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO 6 ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC 6 ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/ Ġ Ġ\ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ ĠH 1 - N 1 ĠĠ ĠC 5 -- N 7 \\ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ|| ĠĠĠĠ ĠC 8 - H 8 ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ ĠC 2 ĠĠ ĠC 4 -- N 9 / ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠ Ġ/ Ġ\\ Ġ/ ĠĠĠĠĠ Ġ\ ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠH 2 1 - N 2 ĠĠ ĠN 3 ĠĠĠĠĠĠĠ Ġ\ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ\ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ ĠH 2 2 ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ\ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ\ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠ ĠOP 1 ĠĠĠ ĠH 5 ' ĠH 4 ' Ġ ĠO 4 ' Ġ Ġ\ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ| ĠĠĠ Ġ\ Ġ/ ĠĠ Ġ\ Ġ Ġ\ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠ Ġ- P - O 5 '- C 5 ' --- C 4 ' ĠĠĠ ĠC 1 ' ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ\ ĠĠĠĠ Ġ/ Ġ\ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠ ĠOP 2 ĠĠĠ ĠH 5 '' ĠĠ ĠC 3 ' -- C 2 ' ĠH 1 ' ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/ Ġ\ ĠĠ Ġ/ Ġ\ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO 3 ' ĠH 3 ' ĠO 2 ' ĠH 2 '' Ġ+ ĠH 2 ' ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġ| ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHO 2 ' ĊĠ ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ@ org . junit . jupiter . api . After Each ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġstr . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġmake Ġsure Ġthere Ġare Ġno Ġbon ds Ġbetween Ġthe Ġtwo Ġres idue Ġ- Ġi . e . Ġthe ĠTER Ġrecord ĊĠĠĠĠ Ġ* Ġstops Ġthe Ġbond Ġprocessing Ġeven Ġthough Ġthe Ġres idue Ġnumbers Ġare Ġthe Ġsame ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName ( Ġ" test Ġprocessing Ġof ĠGu an ine Ġbon ds ") ĊĠĠĠ Ġfun Ġtest TER record Processing () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġmol Ġ= ĠM olecule () ĊĠĠĠĠĠĠĠ Ġval Ġmessages Ġ: ĠMutable List < String > Ġ= Ġmutable ListOf () ĊĊĠĠĠĠĠĠĠ ĠParser P db File ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. Builder ( mol ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set M olecule Name (" 1 B NA ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage Strings ( messages ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load P db From Stream ( str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. parse () ĊĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġval Ġatoms Ġ= Ġmol . atom Number To Atom Info Hash ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 3 , Ġatoms . size ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġchecked Ġbond Ġlist Ġby Ġexam ination Ġ- Ġseems ĠOK Ġ( relative Ġto Ġasci id raw Ġabove ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 4 , Ġmol . bond List . size ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġthat Ġthe ĠTER Ġrecord Ġis Ġentered Ġinto Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġatom Ġlist Ġas Ġa ĠTER _ RECORD Ġtype . ĊĠĠĠĠĠĠĠ Ġval ĠshouldBe TER Ġ= Ġmol . atom Number To Atom Info Hash [ 3 9 ] ĊĠĠĠĠĠĠĠ ĠassertNotNull ( shouldBe TER ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( P db Atom . Atom Type . IS _ TER _ RECORD , ĠshouldBe TER !!. atom Type ) ĊĊĠĠĠ Ġ} Ċ Ċ }