Coverage Report

Created: 2025-08-05 06:45

/src/quantlib/ql/time/calendars/thailand.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) 2018 Matthias Groncki
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
 <http://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/thailand.hpp>
22
23
namespace QuantLib {
24
25
0
    Thailand::Thailand() {
26
        // all calendar instances share the same implementation instance
27
0
        static ext::shared_ptr<Calendar::Impl> impl(new Thailand::SetImpl);
28
0
        impl_ = impl;
29
0
    }
30
31
0
    bool Thailand::SetImpl::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
37
0
        if (isWeekend(w)
38
            // New Year's Day
39
0
            || ((d == 1 || (d == 3 && w == Monday)) && m == January)
40
            // Chakri Memorial Day
41
0
            || ((d == 6 || ((d == 7 || d == 8) && w == Monday)) && m == April)
42
            // Songkran Festival (was cancelled in 2020 due to the Covid-19 Pandamic)
43
0
            || ((d == 13 || d == 14 || d == 15) && m == April && y != 2020)
44
            // Substitution Songkran Festival, usually not more than 5 days in total (was cancelled
45
            // in 2020 due to the Covid-19 Pandamic)
46
0
            || (d == 16 && (w == Monday || w == Tuesday) && m == April && y != 2020)
47
            // Labor Day
48
0
            || ((d == 1 || ((d == 2 || d == 3) && w == Monday)) && m == May)
49
            // Coronation Day
50
0
            || ((d == 4 || ((d == 5 || d == 6) && w == Monday)) && m == May && y >= 2019)
51
            // H.M.Queen Suthida Bajrasudhabimalalakshana’s Birthday
52
0
            || ((d == 03 || ((d == 04 || d == 05) && w == Monday)) && m == June && y >= 2019)
53
            // H.M. King Maha Vajiralongkorn Phra Vajiraklaochaoyuhua’s Birthday
54
0
            || ((d == 28 || ((d == 29 || d == 30) && w == Monday)) && m == July && y >= 2017)
55
            //  ​H.M. Queen Sirikit The Queen Mother’s Birthday / Mother’s Day
56
0
            || ((d == 12 || ((d == 13 || d == 14) && w == Monday)) && m == August)
57
            // H.M. King Bhumibol Adulyadej The Great Memorial Day
58
0
            || ((d == 13 || ((d == 14 || d == 15) && w == Monday)) && m == October && y >= 2017)
59
            // Chulalongkorn Day
60
0
            || ((d == 23 || ((d == 24 || d == 25) && w == Monday)) && m == October && y != 2021)  // Moved 2021, see below
61
            // H.M. King Bhumibol Adulyadej The Great’s Birthday/ National Day / Father’s Day
62
0
            || ((d == 5 || ((d == 6 || d == 7) && w == Monday)) && m == December)
63
            // Constitution Day
64
0
            || ((d == 10 || ((d == 11 || d == 12) && w == Monday)) && m == December)
65
            // New Year’s Eve
66
0
            || ((d == 31 && m == December) || (d == 2 && w == Monday && m == January && y != 2024))  // Moved 2024
67
0
            )
68
0
            return false;
69
70
0
        if ((y == 2000) &&
71
0
            (   (d==21 && m==February)  // Makha Bucha Day (Substitution Day)
72
0
             || (d==5  && m==May)       // Coronation Day
73
0
             || (d==17 && m==May)       // Wisakha Bucha Day
74
0
             || (d==17 && m==July)      // Buddhist Lent Day
75
0
             || (d==23 && m==October)   // Chulalongkorn Day
76
0
                ))
77
0
            return false;
78
79
0
        if ((y == 2001) &&
80
0
            (   (d==8 && m==February) // Makha Bucha Day
81
0
             || (d==7 && m==May)      // Wisakha Bucha Day
82
0
             || (d==8 && m==May)      // Coronation Day (Substitution Day)
83
0
             || (d==6 && m==July)     // Buddhist Lent Day
84
0
             || (d==23 && m==October) // Chulalongkorn Day
85
0
                ))
86
0
            return false;
87
88
        // 2002, 2003 and 2004 are missing
89
90
0
        if ((y == 2005) &&
91
0
            (   (d==23 && m==February) // Makha Bucha Day
92
0
             || (d==5 && m==May)       // Coronation Day
93
0
             || (d==23 && m==May)      // Wisakha Bucha Day (Substitution Day for Sunday 22 May)
94
0
             || (d==1 && m==July)      // Mid Year Closing Day
95
0
             || (d==22 && m==July)     // Buddhist Lent Day
96
0
             || (d==24 && m==October)  // Chulalongkorn Day (Substitution Day for Sunday 23 October)
97
0
                ))
98
0
            return false;
99
100
0
        if ((y == 2006) &&
101
0
            (  (d==13 && m==February) // Makha Bucha Day
102
0
            || (d==19 && m==April)    // Special Holiday
103
0
            || (d==5 && m==May)       // Coronation Day
104
0
            || (d==12 && m==May)      // Wisakha Bucha Day
105
0
            || (d==12 && m==June)     // Special Holidays (Due to the auspicious occasion of the
106
                                      // celebration of 60th Anniversary of His Majesty's Accession
107
                                      // to the throne. For Bangkok, Samut Prakan, Nonthaburi,
108
                                      // Pathumthani and Nakhon Pathom province)
109
0
            || (d==13 && m==June)     // Special Holidays (as above)
110
0
            || (d==11 && m==July)     // Buddhist Lent Day
111
0
            || (d==23 && m==October)  // Chulalongkorn Day
112
0
               ))
113
0
            return false;
114
115
0
        if ((y == 2007) &&
116
0
            (   (d==5 && m==March)     // Makha Bucha Day (Substitution Day for Saturday 3 March)
117
0
             || (d==7 && m==May)       // Coronation Day (Substitution Day for Saturday 5 May)
118
0
             || (d==31 && m==May)      // Wisakha Bucha Day
119
0
             || (d==30 && m==July)     // Asarnha Bucha Day (Substitution Day for Sunday 29 July)
120
0
             || (d==23 && m==October)  // Chulalongkorn Day
121
0
             || (d==24 && m==December) // Special Holiday
122
0
                ))
123
0
            return false;
124
125
0
        if ((y == 2008) &&
126
0
            (   (d==21 && m==February) // Makha Bucha Day
127
0
             || (d==5 && m==May)       // Coronation Day
128
0
             || (d==19 && m==May)      // Wisakha Bucha Day
129
0
             || (d==1 && m==July)      // Mid Year Closing Day
130
0
             || (d==17 && m==July)     // Asarnha Bucha Day
131
0
             || (d==23 && m==October)  // Chulalongkorn Day
132
0
               ))
133
0
            return false;
134
135
0
        if ((y == 2009) &&
136
0
            (   (d==2 && m==January)  // Special Holiday
137
0
             || (d==9 && m==February) // Makha Bucha Day
138
0
             || (d==5 && m==May)      // Coronation Day
139
0
             || (d==8 && m==May)      // Wisakha Bucha Day
140
0
             || (d==1 && m==July)     // Mid Year Closing Day
141
0
             || (d==6 && m==July)     // Special Holiday
142
0
             || (d==7 && m==July)     // Asarnha Bucha Day
143
0
             || (d==23 && m==October) // Chulalongkorn Day
144
0
               ))
145
0
            return false;
146
147
0
        if ((y == 2010) &&
148
0
            (   (d==1 && m==March)    // Substitution for Makha Bucha Day(Sunday 28 February)
149
0
             || (d==5 && m==May)      // Coronation Day
150
0
             || (d==20 && m==May)     // Special Holiday
151
0
             || (d==21 && m==May)     // Special Holiday
152
0
             || (d==28 && m==May)     // Wisakha Bucha Day
153
0
             || (d==1 && m==July)     // Mid Year Closing Day
154
0
             || (d==26 && m==July)    // Asarnha Bucha Day
155
0
             || (d==13 && m==August)  // Special Holiday
156
0
             || (d==25 && m==October) // Substitution for Chulalongkorn Day(Saturday 23 October)
157
0
               ))
158
0
            return false;
159
160
0
        if ((y == 2011) &&
161
0
            (   (d==18 && m==February) // Makha Bucha Day
162
0
             || (d==5 && m==May)       // Coronation Day
163
0
             || (d==16 && m==May)      // Special Holiday
164
0
             || (d==17 && m==May)      // Wisakha Bucha Day
165
0
             || (d==1 && m==July)      // Mid Year Closing Day
166
0
             || (d==15 && m==July)     // Asarnha Bucha Day
167
0
             || (d==24 && m==October)  // Substitution for Chulalongkorn Day(Sunday 23 October)
168
0
               ))
169
0
            return false;
170
171
0
        if ((y == 2012) &&
172
0
            (   (d==3 && m==January)  // Special Holiday
173
0
             || (d==7 && m==March)    // Makha Bucha Day 2/
174
0
             || (d==9 && m==April)    // Special Holiday
175
0
             || (d==7 && m==May)      // Substitution for Coronation Day(Saturday 5 May)
176
0
             || (d==4 && m==June)     // Wisakha Bucha Day
177
0
             || (d==2 && m==August)   // Asarnha Bucha Day
178
0
             || (d==23 && m==October) // Chulalongkorn Day
179
0
                ))
180
0
            return false;
181
182
0
        if ((y == 2013) &&
183
0
            (   (d==25 && m==February) // Makha Bucha Day
184
0
             || (d==6 && m==May)       // Substitution for Coronation Day(Sunday 5 May)
185
0
             || (d==24 && m==May)      // Wisakha Bucha Day
186
0
             || (d==1 && m==July)      // Mid Year Closing Day
187
0
             || (d==22 && m==July)     // Asarnha Bucha Day 2/
188
0
             || (d==23 && m==October)  // Chulalongkorn Day
189
0
             || (d==30 && m==December) // Special Holiday
190
0
                ))
191
0
            return false;
192
193
0
        if ((y == 2014) &&
194
0
            (   (d==14 && m==February) // Makha Bucha Day
195
0
             || (d==5 && m==May)       // Coronation Day
196
0
             || (d==13 && m==May)      // Wisakha Bucha Day
197
0
             || (d==1 && m==July)      // Mid Year Closing Day
198
0
             || (d==11 && m==July)     // Asarnha Bucha Day 1/
199
0
             || (d==11 && m==August)   // Special Holiday
200
0
             || (d==23 && m==October)  // Chulalongkorn Day
201
0
                ))
202
0
            return false;
203
204
0
        if ((y == 2015) &&
205
0
            (   (d==2 && m==January)  // Special Holiday
206
0
             || (d==4 && m==March)    // Makha Bucha Day
207
0
             || (d==4 && m==May)      // Special Holiday
208
0
             || (d==5 && m==May)      // Coronation Day
209
0
             || (d==1 && m==June)     // Wisakha Bucha Day
210
0
             || (d==1 && m==July)     // Mid Year Closing Day
211
0
             || (d==30 && m==July)    // Asarnha Bucha Day 1/
212
0
             || (d==23 && m==October) // Chulalongkorn Day
213
0
                ))
214
0
            return false;
215
216
0
        if ((y == 2016) &&
217
0
            (   (d==22 && m==February) // Makha Bucha Day
218
0
             || (d==5 && m==May)       // Coronation Day
219
0
             || (d==6 && m==May)       // Special Holiday
220
0
             || (d==20 && m==May)      // Wisakha Bucha Day
221
0
             || (d==1 && m==July)      //  Mid Year Closing Day
222
0
             || (d==18 && m==July)     // Special Holiday
223
0
             || (d==19 && m==July)     // Asarnha Bucha Day 1/
224
0
             || (d==24 && m==October)  // Substitution for Chulalongkorn Day (Sunday 23rd October)
225
0
                ))
226
0
            return false;
227
228
0
        if ((y == 2017) &&
229
0
            (      (d == 13 && m == February)  // Makha Bucha Day
230
0
                || (d == 10 && m == May)       // Wisakha Bucha Day
231
0
                || (d == 10 && m == July)      // Asarnha Bucha Day
232
0
                || (d == 23 && m == October)   // Chulalongkorn Day
233
0
                || (d == 26 && m == October)   // Special Holiday
234
0
                ))
235
0
            return false;
236
237
0
        if ((y == 2018) &&
238
0
            (   (d==1 && m==March)    // Makha Bucha Day
239
0
             || (d==29 && m==May)     // Wisakha Bucha Day
240
0
             || (d==27 && m==July)    // Asarnha Bucha Day1
241
0
             || (d==23 && m==October) // Chulalongkorn Day
242
0
                ))
243
0
            return false;
244
245
0
        if ((y == 2019) && ((d == 19 && m == February) // Makha Bucha Day
246
0
                            || (d == 6 && m == May)    // Special Holiday
247
0
                            || (d == 20 && m == May)   // Wisakha Bucha Day
248
0
                            || (d == 16 && m == July)  // Asarnha Bucha Day
249
0
                            ))
250
0
            return false;
251
252
0
        if ((y == 2020) && ((d == 10 && m == February)    // Makha Bucha Day
253
0
                            || (d == 6 && m == May)       // Wisakha Bucha Day
254
0
                            || (d == 6 && m == July)      // Asarnha Bucha Day
255
0
                            || (d == 27 && m == July)     // Substitution for Songkran Festival
256
0
                            || (d == 4 && m == September) // Substitution for Songkran Festival
257
0
                            || (d == 7 && m == September) // Substitution for Songkran Festival
258
0
                            || (d == 11 && m == December) // Special Holiday
259
0
                            ))
260
0
            return false;
261
262
0
        if ((y == 2021) && ((d == 12 && m == February)     // Special Holiday
263
0
                            || (d == 26 && m == February)  // Makha Bucha Day
264
0
                            || (d == 26 && m == May)       // Wisakha Bucha Day
265
0
                            || (d == 26 && m == July)      // Substitution for Asarnha Bucha Day (Saturday 24th July 2021)
266
0
                            || (d == 24 && m == September) // Special Holiday
267
0
                            || (d == 22 && m == October)   // ​Substitution for Chulalongkorn Day
268
0
                            ))
269
0
            return false;
270
271
0
        if ((y == 2022) && ((d == 16 && m == February)   // Makha Bucha Day
272
0
                            || (d == 16 && m == May)     // Substitution for Wisakha Bucha Day (Sunday 15th May 2022)
273
0
                            || (d == 13 && m == July)    // Asarnha Bucha Day
274
0
                            || (d == 29 && m == July)    // Additional special holiday (added)
275
0
                            || (d == 14 && m == October) // Additional special holiday (added)
276
0
                            || (d == 24 && m == October) // ​Substitution for Chulalongkorn Day (Sunday 23rd October 2022)
277
0
            ))
278
0
            return false;
279
280
0
        if ((y == 2023) && ((d == 6 && m == March)        // Makha Bucha Day
281
0
                            || (d == 5 && m == May)       // Additional special holiday (added)
282
0
                            || (d == 5 && m == June)      // Substitution for H.M. Queen's birthday and Wisakha Bucha Day (Saturday 3rd June 2022)
283
0
                            || (d == 1 && m == August)    // Asarnha Bucha Day
284
0
                            || (d == 23 && m == October)  // Chulalongkorn Day
285
0
                            || (d == 29 && m == December) // Substitution for New Year’s Eve (Sunday 31st December 2023) (added)
286
0
            ))
287
0
            return false;
288
289
0
        if ((y == 2024) && ((d == 26 && m == February)    // Substitution for Makha Bucha Day (Saturday 24th February 2024)
290
0
                            || (d == 8 && m == April)     // Substitution for Chakri Memorial Day (Saturday 6th April 2024)
291
0
                            || (d == 12 && m == April)    // Additional holiday in relation to the Songkran festival
292
0
                            || (d == 6 && m == May)       // Substitution for Coronation Day (Saturday 4th May 2024)
293
0
                            || (d == 22 && m == May)      // Wisakha Bucha Day
294
0
                            || (d == 22 && m == July)     // Substitution for Asarnha Bucha Day (Saturday 20th July 2024)
295
0
                            || (d == 23 && m == October)  // Chulalongkorn Day
296
0
            ))
297
0
            return false;
298
299
0
        if ((y == 2025) && ((d == 12 && m == February)    // Substitution for Makha Bucha Day (Wednesday 12th February 2025)
300
0
            || (d == 7 && m == April)     // Substitution for Chakri Memorial Day (Sunday 6th April 2025)
301
0
            || (d == 5 && m == May)       // Substitution for Coronation Day (Sunday 4th May 2025)
302
0
            || (d == 12 && m == May)      // Wisakha Bucha Day
303
0
            || (d == 10 && m == July)     // Substitution for Asarnha Bucha Day (Tuesday 20th July 2025)
304
0
            || (d == 23 && m == October)  // Chulalongkorn Day
305
0
            ))
306
0
            return false;
307
308
0
        return true;
309
0
    }
310
311
}