@@ -26,6 +26,9 @@ subroutine test_36(error_cnt)
26
26
27
27
type (json_file) :: my_file
28
28
character (kind= json_CK,len= :),allocatable :: str_in, str_out
29
+ integer :: i ! ! counter for number of test cases
30
+ integer :: j ! ! counter
31
+ integer :: n ! ! size of strings to append
29
32
30
33
write (error_unit,' (A)' ) ' '
31
34
write (error_unit,' (A)' ) ' ================================='
@@ -35,24 +38,78 @@ subroutine test_36(error_cnt)
35
38
36
39
error_cnt = 0
37
40
38
- ! create a long string:
39
- str_in = ' {"long_string": "' // repeat (' a' , 10000 ) // ' "}'
40
-
41
- call my_file% initialize()
42
-
43
- call my_file% load_from_string(str_in)
44
-
45
- if (my_file% failed()) then
46
- call my_file% print_error_message(error_unit)
47
- error_cnt = error_cnt + 1
48
- end if
49
- call my_file% print_to_string(str_out)
50
- if (my_file% failed()) then
51
- call my_file% print_error_message(error_unit)
52
- error_cnt = error_cnt + 1
53
- end if
54
-
55
- call my_file% destroy()
41
+ do i = 1 , 2
42
+
43
+ do n = 0 , 200
44
+
45
+ str_in = ' '
46
+ str_out = ' '
47
+
48
+ ! create some long strings:
49
+ ! [the idea here is to check the chunk
50
+ ! code for different sized strings]
51
+ select case (i)
52
+ case (1 )
53
+ ! one big string
54
+ str_in = ' {"long_string":"' // repeat (' a' , 10000 ) // ' "}'
55
+ case (2 :)
56
+ ! a lot of little strings
57
+ str_in = ' {"big_array":['
58
+ do j = 1 , 1000
59
+ str_in = str_in // ' "' // repeat (' a' , n) // ' "'
60
+ if (j< 1000 ) str_in = str_in // ' ,'
61
+ end do
62
+ str_in = str_in// ' ]}'
63
+ end select
64
+
65
+ ! don't print extra spaces, so the result will match the input exactly
66
+ call my_file% initialize(no_whitespace= .true. )
67
+
68
+ ! load from the original string:
69
+ call my_file% load_from_string(str_in)
70
+ if (my_file% failed()) then
71
+ call my_file% print_error_message(error_unit)
72
+ error_cnt = error_cnt + 1
73
+ end if
74
+
75
+ ! now, write it to a new string:
76
+ call my_file% print_to_string(str_out)
77
+ if (my_file% failed()) then
78
+ call my_file% print_error_message(error_unit)
79
+ error_cnt = error_cnt + 1
80
+ end if
81
+ call my_file% destroy()
82
+
83
+ ! verify that the strings are the same:
84
+ if (str_in /= str_out) then
85
+ write (error_unit,' (A,1X,I2,1X,I4)' ) ' Error: the strings are not the same for case' , i, n
86
+ error_cnt = error_cnt + 1
87
+ if (n== 2 ) then
88
+ write (error_unit,' (A)' ) ' '
89
+ write (error_unit,' (A)' ) ' ----str_in:'
90
+ write (error_unit,' (A)' ) str_in
91
+ write (error_unit,' (A)' ) ' '
92
+ write (error_unit,' (A)' ) ' ----str_out:'
93
+ write (error_unit,' (A)' ) str_out
94
+ write (error_unit,' (A)' ) ' '
95
+ write (error_unit,' (A)' ) ' '
96
+ error stop
97
+ end if
98
+ end if
99
+
100
+ ! now load the string again to verify that it
101
+ ! printed correctly without errors:
102
+ call my_file% load_from_string(str_out)
103
+ if (my_file% failed()) then
104
+ call my_file% print_error_message(error_unit)
105
+ error_cnt = error_cnt + 1
106
+ end if
107
+
108
+ if (i== 1 ) exit ! only one for this case
109
+
110
+ end do
111
+
112
+ end do
56
113
57
114
if (error_cnt== 0 ) write (error_unit,' (A)' ) ' Success!'
58
115
0 commit comments