1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
PROGRAM test_compoundparser
USE, INTRINSIC :: ISO_C_BINDING
USE, INTRINSIC :: ISO_FORTRAN_ENV
USE :: xraylib
USE :: libtest
IMPLICIT NONE
TYPE (xrl_error), POINTER :: error => NULL()
CHARACTER (KIND=C_CHAR,LEN=3) :: symbol
INTEGER :: Z
TYPE (compoundData), POINTER :: cd
CALL assert(ASSOCIATED(CompoundParser("C19H29COOH")))
CALL assert(ASSOCIATED(CompoundParser("C12H10")))
CALL assert(ASSOCIATED(CompoundParser("C12H6O2")))
CALL assert(ASSOCIATED(CompoundParser("C6H5Br")))
CALL assert(ASSOCIATED(CompoundParser("C3H4OH(COOH)3")))
CALL assert(ASSOCIATED(CompoundParser("HOCH2CH2OH")))
CALL assert(ASSOCIATED(CompoundParser("C5H11NO2")))
CALL assert(ASSOCIATED(CompoundParser("CH3CH(CH3)CH3")))
CALL assert(ASSOCIATED(CompoundParser("NH2CH(C4H5N2)COOH")))
CALL assert(ASSOCIATED(CompoundParser("H2O")))
CALL assert(ASSOCIATED(CompoundParser("Ca5(PO4)3F")))
CALL assert(ASSOCIATED(CompoundParser("Ca5(PO4)3OH")))
CALL assert(ASSOCIATED(CompoundParser("Ca5.522(PO4.48)3OH")))
CALL assert(ASSOCIATED(CompoundParser("Ca5.522(PO.448)3OH")))
cd => CompoundParser('H2SO4')
CALL assert(cd%nElements == 3)
CALL assert(ABS(cd%molarMass - 98.09_C_DOUBLE) < 1E-6_C_DOUBLE)
CALL assert(ALL(cd%Elements - [1, 8, 16] == 0))
CALL assert(ALL(ABS(cd%massFractions - [0.02059333265368539_C_DOUBLE, &
0.6524620246712203_C_DOUBLE, 0.32694464267509427_C_DOUBLE]) &
< 1E-6_C_DOUBLE))
CALL assert(ALL(ABS(cd%nAtoms - [2.0_C_DOUBLE, 4.0_C_DOUBLE, &
1.0_C_DOUBLE]) < 1E-6_C_DOUBLE))
CALL assert(ABS(cd%nAtomsAll - 7.0) < 1E-6)
DEALLOCATE(cd)
CALL assert(.NOT. ASSOCIATED(CompoundParser("CuI2ww")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("0C")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("2O")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("13Li")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("2(NO3)")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("H(2)")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("Ba(12)")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("Cr(5)3")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("Pb(13)2")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("Au(22)11")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("Au11(H3PO4)2)")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("Au11(H3PO4))2")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("Au(11(H3PO4))2")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("Ca5.522(PO.44.8)3OH")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("Ba[12]")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("Auu1")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("AuL1")))
CALL assert(.NOT. ASSOCIATED(CompoundParser(" ")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("\t")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("\n")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("Au L1")))
CALL assert(.NOT. ASSOCIATED(CompoundParser("Au\tFe")))
CALL assert(SymbolToAtomicNumber("Fe", error) == 26)
CALL assert(.NOT. ASSOCIATED(error))
CALL assert(SymbolToAtomicNumber("Uu", error) == 0)
CALL assert(ASSOCIATED(error))
CALL assert(error%code == XRL_ERROR_INVALID_ARGUMENT)
WRITE (output_unit, '(A,A)') 'Error message: ', TRIM(error%message)
DEALLOCATE(error)
symbol = AtomicNumberToSymbol(26, error)
CALL assert(symbol == "Fe")
CALL assert(.NOT. ASSOCIATED(error))
symbol = AtomicNumberToSymbol(-2, error)
CALL assert(LEN_TRIM(symbol) == 0)
CALL assert(ASSOCIATED(error))
CALL assert(error%code == XRL_ERROR_INVALID_ARGUMENT);
WRITE (output_unit, '(A,A)') 'Error message: ', TRIM(error%message)
DEALLOCATE(error)
symbol = AtomicNumberToSymbol(108, error)
CALL assert(LEN_TRIM(symbol) == 0)
CALL assert(ASSOCIATED(error))
CALL assert(error%code == XRL_ERROR_INVALID_ARGUMENT);
WRITE (output_unit, '(A,A)') 'Error message: ', TRIM(error%message)
DEALLOCATE(error)
DO Z = 1, 107
symbol = AtomicNumberToSymbol(Z)
CALL assert(LEN_TRIM(symbol) > 0)
CALL assert(SymbolToAtomicNumber(symbol) == Z)
ENDDO
ENDPROGRAM test_compoundparser
|