File: intrinsics_70.f90

package info (click to toggle)
lfortran 0.45.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 46,332 kB
  • sloc: cpp: 137,068; f90: 51,260; python: 6,444; ansic: 4,277; yacc: 2,285; fortran: 806; sh: 524; makefile: 30; javascript: 15
file content (61 lines) | stat: -rw-r--r-- 2,016 bytes parent folder | download
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
program intrinsics_70
    implicit none
    
    real :: x
    real, parameter :: epsilon = 1e-10
    real :: res_real(4)
    real, parameter :: r1 = aint(11.21)
    real(4), parameter :: r2 = aint(11.21_8, 4)
    real(8), parameter :: r3 = aint(231.3, 8)
    real, parameter :: ar1(4) = aint([1.2, 3.5, 3.4, 2.1])
    real(8), parameter :: ar3(4) = aint([1.2_4, 3.5_4, 3.4_4, 2.1_4], 8)
    real :: arr1(4) = [1.2, 3.5, 3.4, 2.1]
    real(4) :: arr2(4) = [1.2_4, 3.5_4, 3.4_4, 2.1_4]
    real(8) :: arr3(4) = [1.2_8, 3.5_8, 3.4_8, 2.1_8]

    print *, aint(arr1)
    if (any(abs(aint(arr1) - [1.0, 3.0, 3.0, 2.0]) > epsilon)) error stop
    print *, aint(arr2, 4)
    if (any(abs(aint(arr2, 4) - [1.0, 3.0, 3.0, 2.0]) > epsilon)) error stop
    print *, aint(arr3, 8)
    if (any(abs(aint(arr3, 8) - [1.0, 3.0, 3.0, 2.0]) > epsilon)) error stop

    print *, r1
    if (abs(r1 - 11.0) > epsilon) error stop
    print *, r2
    if (abs(r2 - 11.0) > epsilon) error stop
    print *, r3
    if (abs(r3 - 231.0) > epsilon) error stop
    print *, ar1
    if (any(abs(ar1 - [1.0, 3.0, 3.0, 2.0]) > epsilon)) error stop
    print *, ar3
    if (any(abs(ar3 - [1.0, 3.0, 3.0, 2.0]) > epsilon)) error stop

    x = 4.23
    print *, aint(x)
    if (abs(aint(x) - 4.0) > epsilon) error stop

    x = -4.23
    print *, aint(x)
    if (abs(aint(x)  - (-4.0)) > epsilon) error stop

    print *, aint(0.0)
    if (abs(aint(0.0) - 0.0) > epsilon) error stop

    print *, aint(4.23)
    if (abs(aint(4.23) - 4.0) > epsilon) error stop

    print *, aint(-4.23, 4)
    if (abs(aint(-4.23, 4) - (-4.0)) > epsilon) error stop

    ! Compile time broadcasting
    res_real = aint([real :: 1.2, 3.5, 3.4, 2.1])
    print *, res_real
    if (abs(res_real(1) - 1.0) > epsilon) error stop
    print *, res_real(2)
    if (abs(res_real(2) - 3.0) > epsilon) error stop
    print *, res_real(3)
    if (abs(res_real(3) - 3.0) > epsilon) error stop
    print *, res_real(4)
    if (abs(res_real(4) - 2.0) > epsilon) error stop
end program