Coverage Report

Created: 2025-09-04 07:11

/src/quantlib/ql/time/calendars/indonesia.cpp
Line
Count
Source (jump to first uncovered line)
1
/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
3
/*
4
 Copyright (C) 2005, 2007, 2008, 2009, 2010, 2011 StatPro Italia srl
5
6
 This file is part of QuantLib, a free-software/open-source library
7
 for financial quantitative analysts and developers - http://quantlib.org/
8
9
 QuantLib is free software: you can redistribute it and/or modify it
10
 under the terms of the QuantLib license.  You should have received a
11
 copy of the license along with this program; if not, please email
12
 <quantlib-dev@lists.sf.net>. The license is also available online at
13
 <https://www.quantlib.org/license.shtml>.
14
15
 This program is distributed in the hope that it will be useful, but WITHOUT
16
 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17
 FOR A PARTICULAR PURPOSE.  See the license for more details.
18
*/
19
20
#include <ql/time/calendars/indonesia.hpp>
21
#include <ql/errors.hpp>
22
23
namespace QuantLib {
24
25
0
    Indonesia::Indonesia(Market market) {
26
        // all calendar instances share the same implementation instance
27
0
        static ext::shared_ptr<Calendar::Impl> bejImpl(
28
0
                                                      new Indonesia::BejImpl);
29
0
        switch (market) {
30
0
          case BEJ:
31
0
          case JSX:
32
0
          case IDX:
33
0
            impl_ = bejImpl;
34
0
            break;
35
0
          default:
36
0
            QL_FAIL("unknown market");
37
0
        }
38
0
    }
39
40
0
    bool Indonesia::BejImpl::isBusinessDay(const Date& date) const {
41
0
        Weekday w = date.weekday();
42
0
        Day d = date.dayOfMonth();
43
0
        Month m = date.month();
44
0
        Year y = date.year();
45
0
        Day dd = date.dayOfYear();
46
0
        Day em = easterMonday(y);
47
48
0
        if (isWeekend(w)
49
            // New Year's Day
50
0
            || (d == 1 && m == January)
51
            // Good Friday
52
0
            || (dd == em-3)
53
            // Ascension Thursday
54
0
            || (dd == em+38)
55
            // Independence Day
56
0
            || (d == 17 && m == August)
57
            // Christmas
58
0
            || (d == 25 && m == December)
59
0
            )
60
0
            return false;
61
62
0
        if (y == 2005) {
63
0
            if (// Idul Adha
64
0
                (d == 21 && m == January)
65
                // Imlek
66
0
                || (d == 9 && m == February)
67
                // Moslem's New Year Day
68
0
                || (d == 10 && m == February)
69
                // Nyepi
70
0
                || (d == 11 && m == March)
71
                // Birthday of Prophet Muhammad SAW
72
0
                || (d == 22 && m == April)
73
                // Waisak
74
0
                || (d == 24 && m == May)
75
                // Ascension of Prophet Muhammad SAW
76
0
                || (d == 2 && m == September)
77
                // Idul Fitri
78
0
                || ((d == 3 || d == 4) && m == November)
79
                // National leaves
80
0
                || ((d == 2 || d == 7 || d == 8) && m == November)
81
0
                || (d == 26 && m == December)
82
0
                )
83
0
                return false;
84
0
        }
85
86
0
        if (y == 2006) {
87
0
            if (// Idul Adha
88
0
                (d == 10 && m == January)
89
                // Moslem's New Year Day
90
0
                || (d == 31 && m == January)
91
                // Nyepi
92
0
                || (d == 30 && m == March)
93
                // Birthday of Prophet Muhammad SAW
94
0
                || (d == 10 && m == April)
95
                // Ascension of Prophet Muhammad SAW
96
0
                || (d == 21 && m == August)
97
                // Idul Fitri
98
0
                || ((d == 24 || d == 25) && m == October)
99
                // National leaves
100
0
                || ((d == 23 || d == 26 || d == 27) && m == October)
101
0
                )
102
0
                return false;
103
0
        }
104
105
0
        if (y == 2007) {
106
0
            if (// Nyepi
107
0
                (d == 19 && m == March)
108
                // Waisak
109
0
                || (d == 1 && m == June)
110
                // Ied Adha
111
0
                || (d == 20 && m == December)
112
                // National leaves
113
0
                || (d == 18 && m == May)
114
0
                || ((d == 12 || d == 15 || d == 16) && m == October)
115
0
                || ((d == 21 || d == 24) && m == October)
116
0
                )
117
0
                return false;
118
0
        }
119
120
0
        if (y == 2008) {
121
0
            if (// Islamic New Year
122
0
                ((d == 10 || d == 11) && m == January)
123
                // Chinese New Year
124
0
                || ((d == 7 || d == 8) && m == February)
125
                // Saka's New Year
126
0
                || (d == 7 && m == March)
127
                // Birthday of the prophet Muhammad SAW
128
0
                || (d == 20 && m == March)
129
                // Vesak Day
130
0
                || (d == 20 && m == May)
131
                // Isra' Mi'raj of the prophet Muhammad SAW
132
0
                || (d == 30 && m == July)
133
                // National leave
134
0
                || (d == 18 && m == August)
135
                // Ied Fitr
136
0
                || (d == 30 && m == September)
137
0
                || ((d == 1 || d == 2 || d == 3) && m == October)
138
                // Ied Adha
139
0
                || (d == 8 && m == December)
140
                // Islamic New Year
141
0
                || (d == 29 && m == December)
142
                // New Year's Eve
143
0
                || (d == 31 && m == December)
144
0
                )
145
0
                return false;
146
0
        }
147
148
0
        if (y == 2009) {
149
0
            if (// Public holiday
150
0
                (d == 2 && m == January)
151
                // Chinese New Year
152
0
                || (d == 26 && m == January)
153
                // Birthday of the prophet Muhammad SAW
154
0
                || (d == 9 && m == March)
155
                // Saka's New Year
156
0
                || (d == 26 && m == March)
157
                // National leave
158
0
                || (d == 9 && m == April)
159
                // Isra' Mi'raj of the prophet Muhammad SAW
160
0
                || (d == 20 && m == July)
161
                // Ied Fitr
162
0
                || (d >= 18 && d <= 23 && m == September)
163
                // Ied Adha
164
0
                || (d == 27 && m == November)
165
                // Islamic New Year
166
0
                || (d == 18 && m == December)
167
                // Public Holiday
168
0
                || (d == 24 && m == December)
169
                // Trading holiday
170
0
                || (d == 31 && m == December)
171
0
                )
172
0
                return false;
173
0
        }
174
175
0
        if (y == 2010) {
176
0
            if (// Birthday of the prophet Muhammad SAW
177
0
                   (d == 26 && m == February)
178
                // Saka's New Year
179
0
                || (d == 16 && m == March)
180
                // Birth of Buddha
181
0
                || (d == 28 && m == May)
182
                // Ied Fitr
183
0
                || (d >= 8 && d <= 14 && m == September)
184
                // Ied Adha
185
0
                || (d == 17 && m == November)
186
                // Islamic New Year
187
0
                || (d == 7 && m == December)
188
                // Public Holiday
189
0
                || (d == 24 && m == December)
190
                // Trading holiday
191
0
                || (d == 31 && m == December)
192
0
                )
193
0
                return false;
194
0
        }
195
196
0
        if (y == 2011) {
197
0
            if (// Chinese New Year
198
0
                   (d == 3 && m == February)
199
                // Birthday of the prophet Muhammad SAW
200
0
                || (d == 15 && m == February)
201
                // Birth of Buddha
202
0
                || (d == 17 && m == May)
203
                // Isra' Mi'raj of the prophet Muhammad SAW
204
0
                || (d == 29 && m == June)
205
                // Ied Fitr
206
0
                || (d >= 29 && m == August)
207
0
                || (d <= 2 && m == September)
208
                // Public Holiday
209
0
                || (d == 26 && m == December)
210
0
                )
211
0
                return false;
212
0
        }
213
214
0
        if (y == 2012) {
215
0
            if (// Chinese New Year
216
0
                (d == 23 && m == January)
217
                // Saka New Year
218
0
                || (d == 23 && m == March)
219
                // Ied ul-Fitr
220
0
                || (d >= 20 && d <= 22 && m == August)
221
                // Eid ul-Adha
222
0
                || (d == 26 && m == October)
223
                // Islamic New Year
224
0
                || (d >= 15 && d <= 16 && m == November)
225
                // Public Holiday
226
0
                || (d == 24 && m == December)
227
                // Trading Holiday
228
0
                || (d == 31 && m == December)
229
0
                )
230
0
                return false;
231
0
        }
232
233
0
        if (y == 2013) {
234
0
            if (// Birthday of the prophet Muhammad SAW
235
0
                (d == 24 && m == January)
236
                // Saka New Year
237
0
                || (d == 12 && m == March)
238
                // Isra' Mi'raj of the prophet Muhammad SAW
239
0
                || (d == 6 && m == June)
240
                // Ied ul-Fitr
241
0
                || (d >= 5 && d <= 9 && m == August)
242
                // Eid ul-Adha
243
0
                || (d >= 14 && d <= 15 && m == October)
244
                // Islamic New Year
245
0
                || (d == 5 && m == November)
246
                // Public Holiday
247
0
                || (d == 26 && m == December)
248
                // Trading Holiday
249
0
                || (d == 31 && m == December)
250
0
                )
251
0
                return false;
252
0
        }
253
254
0
        if (y == 2014) {
255
0
            if (// Birthday of the prophet Muhammad SAW
256
0
                (d == 14 && m == January)
257
                // Chinese New Year
258
0
                || (d == 31 && m == January)
259
                // Saka New Year
260
0
                || (d == 31 && m == March)
261
                // Labour Day
262
0
                || (d == 1 && m == May)
263
                // Birth of Buddha
264
0
                || (d == 15 && m == May)
265
                // Isra' Mi'raj of the prophet Muhammad SAW
266
0
                || (d == 27 && m == May)
267
                // Ascension Day of Jesus Christ
268
0
                || (d == 29 && m == May)
269
                // Ied ul-Fitr
270
0
                || ((d >= 28 && m == July) || (d == 1 && m == August))
271
                // Public Holiday
272
0
                || (d == 26 && m == December)
273
                // Trading Holiday
274
0
                || (d == 31 && m == December)
275
0
                )
276
0
                return false;
277
0
        }
278
279
0
        return true;
280
0
    }
281
282
}
283