File: test-compoundparser.f90

package info (click to toggle)
xraylib 4.0.0%2Bdfsg1-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 46,936 kB
  • sloc: ansic: 16,103; f90: 8,746; java: 6,766; python: 1,497; cpp: 1,305; pascal: 1,139; makefile: 809; ruby: 622; php: 594; perl: 573; cs: 193; sh: 125
file content (96 lines) | stat: -rw-r--r-- 3,898 bytes parent folder | download | duplicates (2)
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