Coverage Report

Created: 2026-06-08 06:47

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/quantlib/ql/time/calendars/india.cpp
Line
Count
Source
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
 Copyright (C) 2023, 2024 Skandinaviska Enskilda Banken AB (publ)
6
7
 This file is part of QuantLib, a free-software/open-source library
8
 for financial quantitative analysts and developers - http://quantlib.org/
9
10
 QuantLib is free software: you can redistribute it and/or modify it
11
 under the terms of the QuantLib license.  You should have received a
12
 copy of the license along with this program; if not, please email
13
 <quantlib-dev@lists.sf.net>. The license is also available online at
14
 <https://www.quantlib.org/license.shtml>.
15
16
 This program is distributed in the hope that it will be useful, but WITHOUT
17
 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
18
 FOR A PARTICULAR PURPOSE.  See the license for more details.
19
*/
20
21
#include <ql/time/calendars/india.hpp>
22
23
namespace QuantLib {
24
25
5.69k
    India::India(Market) {
26
        // all calendar instances share the same implementation instance
27
5.69k
        static ext::shared_ptr<Calendar::Impl> impl(new India::NseImpl);
28
5.69k
        impl_ = impl;
29
5.69k
    }
30
31
33.1M
    bool India::NseImpl::isBusinessDay(const Date& date) const {
32
33.1M
        Weekday w = date.weekday();
33
33.1M
        Day d = date.dayOfMonth();
34
33.1M
        Month m = date.month();
35
33.1M
        Year y = date.year();
36
33.1M
        Day dd = date.dayOfYear();
37
33.1M
        Day em = easterMonday(y);
38
39
33.1M
        if (isWeekend(w)
40
            // Republic Day
41
23.7M
            || (d == 26 && m == January)
42
            // Good Friday
43
23.6M
            || (dd == em - 3)
44
            // Ambedkar Jayanti
45
23.5M
            || (d == 14 && m == April)
46
            // May Day
47
23.5M
            || (d == 1 && m == May)
48
            // Independence Day
49
23.4M
            || (d == 15 && m == August)
50
            // Gandhi Jayanti
51
23.3M
            || (d == 2 && m == October)
52
            // Christmas
53
23.3M
            || (d == 25 && m == December))
54
9.85M
            return false;
55
56
57
23.2M
        if (y == 2005) {
58
            // Moharram, Holi, Maharashtra Day, and Ramzan Id fall
59
            // on Saturday or Sunday in 2005
60
100k
            if ( // Bakri Id
61
100k
                (d == 21 && m == January)
62
                // Ganesh Chaturthi
63
100k
                || (d == 7 && m == September)
64
                // Dasara
65
99.7k
                || (d == 12 && m == October)
66
                // Laxmi Puja
67
99.3k
                || (d == 1 && m == November)
68
                // Bhaubeej
69
98.8k
                || (d == 3 && m == November)
70
                // Guru Nanak Jayanti
71
98.4k
                || (d == 15 && m == November))
72
2.54k
                return false;
73
100k
        }
74
75
23.2M
        if (y == 2006) {
76
119k
            if ( // Bakri Id
77
119k
                (d == 11 && m == January)
78
                // Moharram
79
118k
                || (d == 9 && m == February)
80
                // Holi
81
118k
                || (d == 15 && m == March)
82
                // Ram Navami
83
117k
                || (d == 6 && m == April)
84
                // Mahavir Jayanti
85
117k
                || (d == 11 && m == April)
86
                // Maharashtra Day
87
116k
                || (d == 1 && m == May)
88
                // Bhaubeej
89
116k
                || (d == 24 && m == October)
90
                // Ramzan Id
91
116k
                || (d == 25 && m == October))
92
3.34k
                return false;
93
119k
        }
94
95
23.2M
        if (y == 2007) {
96
136k
            if ( // Bakri Id
97
136k
                (d == 1 && m == January)
98
                // Moharram
99
136k
                || (d == 30 && m == January)
100
                // Mahashivratri
101
135k
                || (d == 16 && m == February)
102
                // Ram Navami
103
135k
                || (d == 27 && m == March)
104
                // Maharashtra Day
105
134k
                || (d == 1 && m == May)
106
                // Buddha Pournima
107
134k
                || (d == 2 && m == May)
108
                // Laxmi Puja
109
133k
                || (d == 9 && m == November)
110
                // Bakri Id (again)
111
133k
                || (d == 21 && m == December))
112
3.83k
                return false;
113
136k
        }
114
115
23.2M
        if (y == 2008) {
116
155k
            if ( // Mahashivratri
117
155k
                (d == 6 && m == March)
118
                // Id-E-Milad
119
154k
                || (d == 20 && m == March)
120
                // Mahavir Jayanti
121
154k
                || (d == 18 && m == April)
122
                // Maharashtra Day
123
153k
                || (d == 1 && m == May)
124
                // Buddha Pournima
125
153k
                || (d == 19 && m == May)
126
                // Ganesh Chaturthi
127
152k
                || (d == 3 && m == September)
128
                // Ramzan Id
129
152k
                || (d == 2 && m == October)
130
                // Dasara
131
152k
                || (d == 9 && m == October)
132
                // Laxmi Puja
133
151k
                || (d == 28 && m == October)
134
                // Bhau bhij
135
150k
                || (d == 30 && m == October)
136
                // Gurunanak Jayanti
137
150k
                || (d == 13 && m == November)
138
                // Bakri Id
139
149k
                || (d == 9 && m == December))
140
6.27k
                return false;
141
155k
        }
142
143
23.2M
        if (y == 2009) {
144
167k
            if ( // Moharram
145
167k
                (d == 8 && m == January)
146
                // Mahashivratri
147
167k
                || (d == 23 && m == February)
148
                // Id-E-Milad
149
166k
                || (d == 10 && m == March)
150
                // Holi
151
165k
                || (d == 11 && m == March)
152
                // Ram Navmi
153
165k
                || (d == 3 && m == April)
154
                // Mahavir Jayanti
155
164k
                || (d == 7 && m == April)
156
                // Maharashtra Day
157
163k
                || (d == 1 && m == May)
158
                // Ramzan Id
159
163k
                || (d == 21 && m == September)
160
                // Dasara
161
163k
                || (d == 28 && m == September)
162
                // Bhau Bhij
163
162k
                || (d == 19 && m == October)
164
                // Gurunanak Jayanti
165
161k
                || (d == 2 && m == November)
166
                // Moharram (again)
167
161k
                || (d == 28 && m == December))
168
7.47k
                return false;
169
167k
        }
170
171
23.2M
        if (y == 2010) {
172
183k
            if ( // New Year's Day
173
183k
                (d == 1 && m == January)
174
                // Mahashivratri
175
182k
                || (d == 12 && m == February)
176
                // Holi
177
181k
                || (d == 1 && m == March)
178
                // Ram Navmi
179
181k
                || (d == 24 && m == March)
180
                // Ramzan Id
181
180k
                || (d == 10 && m == September)
182
                // Laxmi Puja
183
179k
                || (d == 5 && m == November)
184
                // Bakri Id
185
179k
                || (d == 17 && m == November)
186
                // Moharram
187
178k
                || (d == 17 && m == December))
188
5.80k
                return false;
189
183k
        }
190
191
23.2M
        if (y == 2011) {
192
192k
            if ( // Mahashivratri
193
192k
                (d == 2 && m == March)
194
                // Ram Navmi
195
191k
                || (d == 12 && m == April)
196
                // Ramzan Id
197
190k
                || (d == 31 && m == August)
198
                // Ganesh Chaturthi
199
190k
                || (d == 1 && m == September)
200
                // Dasara
201
189k
                || (d == 6 && m == October)
202
                // Laxmi Puja
203
188k
                || (d == 26 && m == October)
204
                // Diwali - Balipratipada
205
187k
                || (d == 27 && m == October)
206
                // Bakri Id
207
186k
                || (d == 7 && m == November)
208
                // Gurunanak Jayanti
209
186k
                || (d == 10 && m == November)
210
                // Moharram
211
185k
                || (d == 6 && m == December))
212
7.78k
                return false;
213
192k
        }
214
215
23.2M
        if (y == 2012) {
216
205k
            if ( // Mahashivratri
217
205k
                (d == 20 && m == February)
218
                // Holi
219
204k
                || (d == 8 && m == March)
220
                // Mahavir Jayanti
221
203k
                || (d == 5 && m == April)
222
                // Ramzan Id
223
203k
                || (d == 20 && m == August)
224
                // Ganesh Chaturthi
225
202k
                || (d == 19 && m == September)
226
                // Dasara
227
201k
                || (d == 24 && m == October)
228
                // Diwali - Balipratipada
229
200k
                || (d == 14 && m == November)
230
                // Gurunanak Jayanti
231
199k
                || (d == 28 && m == November))
232
6.57k
                return false;
233
205k
        }
234
235
23.2M
        if (y == 2013) {
236
212k
            if ( // Holi
237
212k
                (d == 27 && m == March)
238
                // Ram Navmi
239
211k
                || (d == 19 && m == April)
240
                // Mahavir Jayanti
241
210k
                || (d == 24 && m == April)
242
                // Ramzan Id
243
209k
                || (d == 9 && m == August)
244
                // Ganesh Chaturthi
245
208k
                || (d == 9 && m == September)
246
                // Bakri Id
247
207k
                || (d == 16 && m == October)
248
                // Diwali - Balipratipada
249
207k
                || (d == 4 && m == November)
250
                // Moharram
251
206k
                || (d == 14 && m == November))
252
6.74k
                return false;
253
212k
        }
254
255
23.2M
        if (y == 2014) {
256
216k
            if ( // Mahashivratri
257
216k
                (d == 27 && m == February)
258
                // Holi
259
215k
                || (d == 17 && m == March)
260
                // Ram Navmi
261
214k
                || (d == 8 && m == April)
262
                // Ramzan Id
263
214k
                || (d == 29 && m == July)
264
                // Ganesh Chaturthi
265
213k
                || (d == 29 && m == August)
266
                // Dasera
267
212k
                || (d == 3 && m == October)
268
                // Bakri Id
269
211k
                || (d == 6 && m == October)
270
                // Diwali - Balipratipada
271
210k
                || (d == 24 && m == October)
272
                // Moharram
273
209k
                || (d == 4 && m == November)
274
                // Gurunank Jayanti
275
208k
                || (d == 6 && m == November))
276
8.59k
                return false;
277
216k
        }
278
279
23.1M
        if (y == 2019) {
280
226k
            if ( // Chatrapati Shivaji Jayanti
281
226k
                (d == 19 && m == February)
282
                // Mahashivratri
283
225k
                || (d == 4 && m == March)
284
                // Holi
285
224k
                || (d == 21 && m == March)
286
                // Annual Bank Closing
287
224k
                || (d == 1 && m == April)
288
                // Mahavir Jayanti
289
223k
                || (d == 17 && m == April)
290
                // Parliamentary Elections
291
222k
                || (d == 29 && m == April)
292
                // Ramzan Id
293
221k
                || (d == 05 && m == June)
294
                // Bakri Id
295
220k
                || (d == 12 && m == August)
296
                // Ganesh Chaturthi
297
219k
                || (d == 2 && m == September)
298
                // Moharram
299
218k
                || (d == 10 && m == September)
300
                // Dasera
301
217k
                || (d == 8 && m == October)
302
                // General Assembly Elections in Maharashtra
303
216k
                || (d == 21 && m == October)
304
                // Diwali - Balipratipada
305
215k
                || (d == 28 && m == October)
306
                // Gurunank Jayanti
307
215k
                || (d == 12 && m == November))
308
12.5k
                return false;
309
226k
        }
310
311
23.1M
        if (y == 2020) {
312
233k
            if ( // Chatrapati Shivaji Jayanti
313
233k
                (d == 19 && m == February)
314
                // Mahashivratri
315
232k
                || (d == 21 && m == February)
316
                // Holi
317
231k
                || (d == 10 && m == March)
318
                // Gudi Padwa
319
230k
                || (d == 25 && m == March)
320
                // Annual Bank Closing
321
229k
                || (d == 1 && m == April)
322
                // Ram Navami
323
228k
                || (d == 2 && m == April)
324
                // Mahavir Jayanti
325
227k
                || (d == 6 && m == April)
326
                // Buddha Pournima
327
226k
                || (d == 7 && m == May)
328
                // Ramzan Id
329
225k
                || (d == 25 && m == May)
330
                // Id-E-Milad
331
224k
                || (d == 30 && m == October)
332
                // Diwali - Balipratipada
333
223k
                || (d == 16 && m == November)
334
                // Gurunank Jayanti
335
222k
                || (d == 30 && m == November))
336
11.0k
                return false;
337
233k
        }
338
339
23.1M
        if (y == 2021) {
340
238k
            if ( // Chatrapati Shivaji Jayanti
341
238k
                (d == 19 && m == February)
342
                // Mahashivratri
343
237k
                || (d == 11 && m == March)
344
                // Holi
345
236k
                || (d == 29 && m == March)
346
                // Gudi Padwa
347
235k
                || (d == 13 && m == April)
348
                // Mahavir Jayanti
349
234k
                || (d == 14 && m == April)
350
                // Ram Navami
351
234k
                || (d == 21 && m == April)
352
                // Buddha Pournima
353
233k
                || (d == 26 && m == May)
354
                // Bakri Id
355
232k
                || (d == 21 && m == July)
356
                // Ganesh Chaturthi
357
231k
                || (d == 10 && m == September)
358
                // Dasera
359
231k
                || (d == 15 && m == October)
360
                // Id-E-Milad
361
230k
                || (d == 19 && m == October)
362
                // Diwali - Balipratipada
363
229k
                || (d == 5 && m == November)
364
                // Gurunank Jayanti
365
228k
                || (d == 19 && m == November))
366
11.2k
                return false;
367
238k
        }
368
369
23.1M
        if (y == 2022) {
370
243k
            if ( // Mahashivratri
371
243k
                (d == 1 && m == March)
372
                // Holi
373
242k
                || (d == 18 && m == March)
374
                // Ramzan Id
375
241k
                || (d == 3 && m == May)
376
                // Buddha Pournima
377
240k
                || (d == 16 && m == May)
378
                // Ganesh Chaturthi
379
239k
                || (d == 31 && m == August)
380
                // Dasera
381
238k
                || (d == 5 && m == October)
382
                // Diwali - Balipratipada
383
237k
                || (d == 26 && m == October)
384
                // Gurunank Jayanti
385
236k
                || (d == 8 && m == November))
386
7.69k
                return false;
387
243k
        }
388
389
23.1M
        if (y == 2023) {
390
244k
            if (
391
                // Holi
392
244k
                (d == 7 && m == March)
393
                // Gudi Padwa
394
243k
                || (d == 22 && m == March)
395
                // Ram Navami
396
242k
                || (d == 30 && m == March)
397
                // Mahavir Jayanti
398
241k
                || (d == 4 && m == April)
399
                // Buddha Pournima
400
240k
                || (d == 5 && m == May)
401
                // Bakri Id
402
239k
                || (d == 29 && m == June)
403
                // Parsi New year
404
238k
                || (d == 16 && m == August)
405
                // Ganesh Chaturthi
406
237k
                || (d == 19 && m == September)
407
                // Id-E-Milad (was moved to Friday 29th)
408
236k
                || (d == 29 && m == September)
409
                // Dasera
410
235k
                || (d == 24 && m == October)
411
                // Diwali - Balipratipada
412
234k
                || (d == 14 && m == November)
413
                // Gurunank Jayanti
414
233k
                || (d == 27 && m == November))
415
11.6k
                return false;
416
244k
        }
417
418
23.1M
        if (y == 2024) {
419
246k
            if ( // Special holiday
420
246k
                (d == 22 && m == January)
421
                // Chatrapati Shivaji Jayanti
422
245k
                || (d == 19 && m == February)
423
                // Mahashivratri
424
244k
                || (d == 8 && m == March)
425
                // Holi
426
243k
                || (d == 25 && m == March)
427
                // Annual Bank Closing
428
242k
                || (d == 1 && m == April)
429
                // Gudi Padwa
430
241k
                || (d == 9 && m == April)
431
                // Id-Ul-Fitr (Ramadan Eid)
432
240k
                || (d == 11 && m == April)
433
                // Ram Navami
434
239k
                || (d == 17 && m == April)
435
                // Mahavir Jayanti
436
238k
                || (d == 21 && m == April)
437
                // General Parliamentary Elections
438
238k
                || (d == 20 && m == May)
439
                // Buddha Pournima
440
237k
                || (d == 23 && m == May)
441
                // Bakri Eid
442
236k
                || (d == 17 && m == June)
443
                // Moharram
444
235k
                || (d == 17 && m == July)
445
                // Eid-E-Milad (estimated Sunday 15th or Monday 16th)
446
234k
                || (d == 16 && m == September)
447
                // Diwali-Laxmi Pujan
448
233k
                || (d == 1 && m == November)
449
                // Gurunank Jayanti
450
232k
                || (d == 15 && m == November))
451
14.6k
                return false;
452
246k
        }
453
454
23.1M
        if (y == 2025) {
455
243k
            if ( // Chatrapati Shivaji Jayanti
456
243k
                (d == 19 && m == February)
457
                // Mahashivratri
458
242k
                || (d == 26 && m == February)
459
                // Holi
460
241k
                || (d == 14 && m == March)
461
                // Ramzan Id (estimated Sunday 30th or Monday 31st)
462
240k
                || (d == 31 && m == March)
463
                // Mahavir Jayanti
464
239k
                || (d == 10 && m == April)
465
                // Buddha Pournima
466
238k
                || (d == 12 && m == May)
467
                // Id-E-Milad (estimated Thursday 4th or Friday 5th)
468
237k
                || (d == 5 && m == September)
469
                // Diwali - Balipratipada
470
236k
                || (d == 22 && m == October)
471
                // Gurunank Jayanti
472
235k
                || (d == 5 && m == November))
473
8.69k
                return false;
474
243k
        }
475
476
23.1M
        if (y == 2026) {
477
238k
            if ( // Municipal Corporation Election - Maharashtra
478
238k
                (d == 15 && m == January)
479
                // Chatrapati Shivaji Jayanti
480
237k
                || (d == 19 && m == February)
481
                // Holi
482
236k
                || (d == 3 && m == March)
483
                // Gudi Padwa
484
235k
                || (d == 19 && m == March)
485
                // Ram Navami
486
234k
                || (d == 26 && m == March)
487
                // Mahavir Jayanti
488
234k
                || (d == 31 && m == March)
489
                // Annual Bank Closing
490
233k
                || (d == 1 && m == April)
491
                // Bakri Id
492
232k
                || (d == 28 && m == May)
493
                // Moharram
494
231k
                || (d == 26 && m == June)
495
                // Id-E-Milad
496
230k
                || (d == 26 && m == August)
497
                // Ganesh Chaturthi
498
229k
                || (d == 14 && m == September)
499
                // Dussehra
500
228k
                || (d == 20 && m == October)
501
                // Diwali - Balipratipada
502
227k
                || (d == 10 && m == November)
503
                // Gurunank Jayanti
504
226k
                || (d == 24 && m == November))
505
13.0k
                return false;
506
238k
        }
507
508
23.1M
        return true;
509
23.1M
    }
510
511
}