-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathfusc
130 lines (122 loc) · 3.6 KB
/
fusc
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
IDENTIFICATION DIVISION.
PROGRAM-ID. TESTS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 EXPECTED PIC 9(8).
01 N-DISP PIC Z(7)9.
01 N PIC 9(8).
01 M PIC 9(8).
01 RESULT PIC 9(8).
PROCEDURE DIVISION.
TESTSUITE 'Fixed Tests'.
MOVE 0 TO N
MOVE 0 TO EXPECTED
PERFORM DOTEST
MOVE 1 TO N
MOVE 1 TO EXPECTED
PERFORM DOTEST
MOVE 2 TO N
MOVE 1 TO EXPECTED
PERFORM DOTEST
MOVE 3 TO N
MOVE 2 TO EXPECTED
PERFORM DOTEST
MOVE 4 TO N
MOVE 1 TO EXPECTED
PERFORM DOTEST
MOVE 5 TO N
MOVE 3 TO EXPECTED
PERFORM DOTEST
MOVE 6 TO N
MOVE 2 TO EXPECTED
PERFORM DOTEST
MOVE 7 TO N
MOVE 3 TO EXPECTED
PERFORM DOTEST
MOVE 8 TO N
MOVE 1 TO EXPECTED
PERFORM DOTEST
MOVE 9 TO N
MOVE 4 TO EXPECTED
PERFORM DOTEST
MOVE 10 TO N
MOVE 3 TO EXPECTED
PERFORM DOTEST
MOVE 11 TO N
MOVE 5 TO EXPECTED
PERFORM DOTEST
MOVE 12 TO N
MOVE 2 TO EXPECTED
PERFORM DOTEST
MOVE 13 TO N
MOVE 5 TO EXPECTED
PERFORM DOTEST
MOVE 14 TO N
MOVE 3 TO EXPECTED
PERFORM DOTEST
MOVE 15 TO N
MOVE 4 TO EXPECTED
PERFORM DOTEST
MOVE 16 TO N
MOVE 1 TO EXPECTED
PERFORM DOTEST
MOVE 17 TO N
MOVE 5 TO EXPECTED
PERFORM DOTEST
MOVE 18 TO N
MOVE 4 TO EXPECTED
PERFORM DOTEST
MOVE 19 TO N
MOVE 7 TO EXPECTED
PERFORM DOTEST
MOVE 20 TO N
MOVE 3 TO EXPECTED
PERFORM DOTEST
TESTSUITE 'Random Tests'.
PERFORM SET-RANDOM-SEED
PERFORM 40 TIMES
COMPUTE N = 1 + 200 * FUNCTION RANDOM
MOVE N TO M
call 'FUSC-TEST'
using by content m
by reference expected
PERFORM DOTEST
END-PERFORM
END TESTS.
DOTEST.
MOVE N TO N-DISP
TESTCASE 'Testing: N = ' FUNCTION TRIM(N-DISP).
INITIALIZE RESULT
CALL 'FUSC' USING BY CONTENT N BY REFERENCE RESULT
EXPECT RESULT TO BE EXPECTED.
.
END PROGRAM TESTS.
PROGRAM-ID. FUSC-TEST RECURSIVE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A PIC 9(8).
01 B PIC 9(8).
01 TMP PIC 9(8).
LINKAGE SECTION.
01 N PIC 9(8).
01 RESULT PIC 9(8).
PROCEDURE DIVISION USING N RESULT.
evaluate true
when n < 2
move n to result
when function rem(n, 2) = 1
compute a = (n - 1) / 2
compute b = (n - 1) / 2 + 1
call 'FUSC-TEST' using
by content a by reference result
move result to tmp
call 'FUSC-TEST' using
by content a by reference result
compute result = tmp + result
when other
compute a = n / 2
call 'FUSC-TEST' using
by content a by reference result
End-evaluate
GOBACK.
END PROGRAM FUSC-TEST.