Coverage Report

Created: 2026-03-31 07:01

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