File: test_ieee_unordered.f90

package info (click to toggle)
lfortran 0.60.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 58,412 kB
  • sloc: cpp: 173,406; f90: 80,491; python: 17,586; ansic: 9,610; yacc: 2,356; sh: 1,401; fortran: 895; makefile: 37; javascript: 15
file content (84 lines) | stat: -rw-r--r-- 2,947 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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
! Test ieee_unordered function
program test_ieee_unordered
    use, intrinsic :: ieee_arithmetic
    use, intrinsic :: iso_fortran_env, only: real32, real64
    implicit none
    
    real(real32) :: x_sp, y_sp, nan_sp, tmp_sp
    real(real64) :: x_dp, y_dp
    logical :: result
    
    print *, "Testing ieee_unordered..."
    
    tmp_sp = 1.0_real32
    
    ! Test 1: Two normal values (ordered)
    x_sp = 1.0_real32
    y_sp = 2.0_real32
    result = ieee_unordered(x_sp, y_sp)
    print *, "ieee_unordered(1.0, 2.0) = ", result
    if (result) error stop "1.0 and 2.0 should be ordered"
    
    ! Test 2: Same values (ordered)
    x_sp = 5.0_real32
    y_sp = 5.0_real32
    result = ieee_unordered(x_sp, y_sp)
    print *, "ieee_unordered(5.0, 5.0) = ", result
    if (result) error stop "5.0 and 5.0 should be ordered"
    
    ! Test 3: Zero and non-zero (ordered)
    x_sp = 0.0_real32
    y_sp = 1.0_real32
    result = ieee_unordered(x_sp, y_sp)
    print *, "ieee_unordered(0.0, 1.0) = ", result
    if (result) error stop "0.0 and 1.0 should be ordered"
    
    ! Test 4: Negative values (ordered)
    x_sp = -3.0_real32
    y_sp = -7.0_real32
    result = ieee_unordered(x_sp, y_sp)
    print *, "ieee_unordered(-3.0, -7.0) = ", result
    if (result) error stop "-3.0 and -7.0 should be ordered"
    
    ! Test 5: First is NaN (unordered)
    nan_sp = ieee_value(tmp_sp, ieee_quiet_nan)
    y_sp = 1.0_real32
    result = ieee_unordered(nan_sp, y_sp)
    print *, "ieee_unordered(NaN, 1.0) = ", result
    if (.not. result) error stop "NaN and 1.0 should be unordered"
    
    ! Test 6: Second is NaN (unordered)
    x_sp = 2.0_real32
    result = ieee_unordered(x_sp, nan_sp)
    print *, "ieee_unordered(2.0, NaN) = ", result
    if (.not. result) error stop "2.0 and NaN should be unordered"
    
    ! Test 7: Both are NaN (unordered)
    result = ieee_unordered(nan_sp, nan_sp)
    print *, "ieee_unordered(NaN, NaN) = ", result
    if (.not. result) error stop "NaN and NaN should be unordered"
    
    ! Test 8: Infinity and normal (ordered)
    x_sp = ieee_value(tmp_sp, ieee_positive_inf)
    y_sp = 100.0_real32
    result = ieee_unordered(x_sp, y_sp)
    print *, "ieee_unordered(+inf, 100.0) = ", result
    if (result) error stop "+inf and 100.0 should be ordered"
    
    ! Test 9: Double precision normal values (ordered)
    x_dp = 1.5_real64
    y_dp = 2.5_real64
    result = ieee_unordered(x_dp, y_dp)
    print *, "ieee_unordered(1.5d0, 2.5d0) = ", result
    if (result) error stop "1.5d0 and 2.5d0 should be ordered"
    
    ! Test 10: Infinities (ordered)
    x_sp = ieee_value(tmp_sp, ieee_positive_inf)
    y_sp = ieee_value(tmp_sp, ieee_negative_inf)
    result = ieee_unordered(x_sp, y_sp)
    print *, "ieee_unordered(+inf, -inf) = ", result
    if (result) error stop "+inf and -inf should be ordered"
    
    print *, "All ieee_unordered tests passed!"
    
end program test_ieee_unordered