File: test_fbuff.jf90

package info (click to toggle)
devicexlib 0.1.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 7,528 kB
  • sloc: fortran: 15,429; f90: 7,388; sh: 3,287; makefile: 229; python: 108; ansic: 62
file content (99 lines) | stat: -rw-r--r-- 2,761 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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
program main

implicit none

call test_buff

contains

subroutine test_buff()
    use tester
    use {{modulename}}, ONLY : {{typename}}
    implicit none
    !
    type({{typename}}) :: buf
    !
    ! The tester class
    type(tester_t) :: my_tester
    !
    integer, pointer :: a_v1(:)
    integer, pointer :: a_v2(:)
    integer, pointer :: a_v3(:)
    integer, pointer :: a_v4(:)
    integer, pointer :: a_m1(:,:)
    integer :: info
    
    
    CALL my_tester% init()

    ! Initialize buffers
    CALL buf%init(info, .true.)
    !
    CALL buf%lock_buffer(a_v1, 0, info)
    CALL buf%release_buffer(a_v1, info)
    CALL buf%lock_buffer(a_m1, (/2, 0/), info)
    CALL buf%release_buffer(a_m1, info)
    !
    ! 
    CALL buf%lock_buffer(a_v1, 10, info)
    !
    ! First time a buffer is allocated, it has exactly the requested size
    !CALL my_tester% assert_equal(SIZE(a_v1), 10)
    !CALL my_tester% assert_equal(info, 0)
    ! Set elements of a_v1 to 1
    a_v1 = 1
    
    ! The previous buffer is already allocated, we get a new one here
    CALL buf%lock_buffer(a_v2, 11, info)
    CALL my_tester% assert_equal(SIZE(a_v2), 11)
    CALL my_tester% assert_equal(info, 0)

    ! The last available slot
    CALL buf%lock_buffer(a_v3, 12, info)
    CALL my_tester% assert_equal(SIZE(a_v3), 12)
    CALL my_tester% assert_equal(info, 0)

    ! Largest request, 134 elements
    CALL buf%lock_buffer(a_v4, 134, info)
    CALL my_tester% assert_equal(SIZE(a_v4), 134)
    CALL my_tester% assert_equal(info, 0)

    ! Release buffer 4 which was allocated as a standard pointer
    CALL buf%release_buffer(a_v4, info)
    ! Re-request a buffer, but smaller. 
    CALL buf%lock_buffer(a_v4, 5, info)
    CALL my_tester% assert_equal(SIZE(a_v4), 5)
    CALL my_tester% assert_equal(info, 0)
    !
    ! Release buffer v4 and v3
    CALL buf%release_buffer(a_v4, info)
    CALL buf%release_buffer(a_v3, info)
    !
    ! Now request a buffer 5 items log. We should be given the previously allocated 12 elements array
    CALL buf%lock_buffer(a_v3, 5, info)
    CALL my_tester% assert_equal(SIZE(a_v3), 5)
    CALL my_tester% assert_equal(info, 0)


    !CALL my_tester% assert_equal(SUM(a_v1), 10)
    CALL buf%release_buffer(a_v1, info)
    CALL buf%release_buffer(a_v2, info)
    CALL buf%release_buffer(a_v3, info)
    
    
    CALL buf%lock_buffer(a_m1, (/3,3/), info)
    CALL buf%release_buffer(a_m1, info)
    !
    CALL buf%lock_buffer(a_m1, (/2,2/), info)
    CALL buf%release_buffer(a_m1, info)
    !
    CALL buf%lock_buffer(a_m1, (/3,2/), info)
    CALL buf%release_buffer(a_m1, info)
    !
    CALL buf%lock_buffer(a_m1, (/3,1/), info)
    CALL buf%release_buffer(a_m1, info)
    
    CALL my_tester% print()
    
end subroutine
end program