• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

GothenburgBitFactory / taskwarrior / 10152339701

29 Jul 2024 09:45PM UTC coverage: 84.437% (+0.07%) from 84.372%
10152339701

push

github

web-flow
Merge pull request #3566 from felixschurk/add-clang-format

Add clang-format to enforce style guide

12359 of 13760 new or added lines in 147 files covered. (89.82%)

123 existing lines in 42 files now uncovered.

19070 of 22585 relevant lines covered (84.44%)

19724.02 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

88.31
/test/variant_multiply.test.cpp
1
////////////////////////////////////////////////////////////////////////////////
2
//
3
// Copyright 2013 - 2021, Göteborg Bit Factory.
4
//
5
// Permission is hereby granted, free of charge, to any person obtaining a copy
6
// of this software and associated documentation files (the "Software"), to deal
7
// in the Software without restriction, including without limitation the rights
8
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
// copies of the Software, and to permit persons to whom the Software is
10
// furnished to do so, subject to the following conditions:
11
//
12
// The above copyright notice and this permission notice shall be included
13
// in all copies or substantial portions of the Software.
14
//
15
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
// SOFTWARE.
22
//
23
// https://www.opensource.org/licenses/mit-license.php
24
//
25
////////////////////////////////////////////////////////////////////////////////
26

27
#include <cmake.h>
28
// cmake.h include header must come first
29

30
#include <Variant.h>
31
#include <test.h>
32

33
#include <iostream>
34

35
#define EPSILON 0.0001
36

37
////////////////////////////////////////////////////////////////////////////////
38
int main(int, char**) {
1✔
39
  UnitTest t(54);
1✔
40

41
  Variant v0(true);
1✔
42
  Variant v1(42);
1✔
43
  Variant v2(3.14);
1✔
44
  Variant v3("foo");
1✔
45
  Variant v4(1234567890, Variant::type_date);
1✔
46
  Variant v5(1200, Variant::type_duration);
1✔
47

48
  // boolean * boolean  -> ERROR
49
  try {
50
    Variant v00 = v0 * v0;
1✔
NEW
51
    t.fail("true * true --> error");
×
52
  } catch (...) {
1✔
53
    t.pass("true * true --> error");
1✔
54
  }
1✔
55

56
  // boolean * integer  -> integer
57
  Variant v01 = v0 * v1;
1✔
58
  t.is(v01.type(), Variant::type_integer, "true * 42 --> integer");
1✔
59
  t.is(v01.get_integer(), 42, "true * 42 --> 42");
1✔
60

61
  // boolean * real     -> real
62
  Variant v02 = v0 * v2;
1✔
63
  t.is(v02.type(), Variant::type_real, "true * 3.14 --> real");
1✔
64
  t.is(v02.get_real(), 3.14, EPSILON, "true * 3.14 --> 3.14");
1✔
65

66
  // boolean * string   -> string
67
  Variant v03 = v0 * v3;
1✔
68
  t.is(v03.type(), Variant::type_string, "true * foo --> real");
1✔
69
  t.is(v03.get_string(), "foo", "true * foo --> foo");
1✔
70

71
  // boolean * date     -> ERROR
72
  try {
73
    Variant v04 = v0 * v4;
1✔
NEW
74
    t.fail("true * 1234567890 --> error");
×
75
  } catch (...) {
1✔
76
    t.pass("true * 1234567890 --> error");
1✔
77
  }
1✔
78

79
  // boolean * duration -> duration
80
  Variant v05 = v0 * v5;
1✔
81
  t.is(v05.type(), Variant::type_duration, "true * 1200 --> duration");
1✔
82
  t.is(v05.get_duration(), 1200, "true * 1200 --> 1200");
1✔
83

84
  // integer * boolean  -> integer
85
  Variant v10 = v1 * v0;
1✔
86
  t.is(v10.type(), Variant::type_integer, "42 * true --> integer");
1✔
87
  t.is(v10.get_integer(), 42, "42 * true --> 42");
1✔
88

89
  // integer * integer  -> integer
90
  Variant v11 = v1 * v1;
1✔
91
  t.is(v11.type(), Variant::type_integer, "42 * 42 --> integer");
1✔
92
  t.is(v11.get_integer(), 1764, "42 * 42 --> 1764");
1✔
93

94
  // integer * real     -> real
95
  Variant v12 = v1 * v2;
1✔
96
  t.is(v12.type(), Variant::type_real, "42 * 3.14 --> real");
1✔
97
  t.is(v12.get_real(), 131.88, EPSILON, "42 * 3.14 --> 131.88");
1✔
98

99
  // integer * string   -> string
100
  Variant v13 = v1 * v3;
1✔
101
  t.is(v13.type(), Variant::type_string, "42 * foo --> string");
1✔
102
  t.is(v13.get_string().substr(0, 10), "foofoofoof", "42 * foo --> foofoofoofoo...");
1✔
103
  // integer * date     -> error
104
  try {
105
    Variant v14 = v1 * v4;
1✔
NEW
106
    t.fail("42 * 1234567890 --> error");
×
107
  } catch (...) {
1✔
108
    t.pass("42 * 1234567890 --> error");
1✔
109
  }
1✔
110

111
  // integer * duration -> duration
112
  Variant v15 = v1 * v5;
1✔
113
  t.is(v15.type(), Variant::type_duration, "42 * 1200 --> duration");
1✔
114
  t.is(v15.get_duration(), 50400, "42 * 1200 --> 50400");
1✔
115

116
  // real * boolean  -> real
117
  Variant v20 = v2 * v0;
1✔
118
  t.is(v20.type(), Variant::type_real, "3.14 * true --> real");
1✔
119
  t.is(v20.get_real(), 3.14, EPSILON, "3.14 * true --> 3.14");
1✔
120

121
  // real * integer  -> real
122
  Variant v21 = v2 * v1;
1✔
123
  t.is(v21.type(), Variant::type_real, "3.14 * 42 --> real");
1✔
124
  t.is(v21.get_real(), 131.88, EPSILON, "3.14 * 42 --> 131.88");
1✔
125

126
  // real * real     -> real
127
  Variant v22 = v2 * v2;
1✔
128
  t.is(v22.type(), Variant::type_real, "3.14 * 3.14 --> real");
1✔
129
  t.is(v22.get_real(), 9.8596, EPSILON, "3.14 * 3.14 --> 9.8596");
1✔
130

131
  // real * string   -> error
132
  try {
133
    Variant v23 = v2 * v3;
1✔
NEW
134
    t.fail("3.14 * foo --> error");
×
135
  } catch (...) {
1✔
136
    t.pass("3.14 * foo --> error");
1✔
137
  }
1✔
138

139
  // real * date     -> error
140
  try {
141
    Variant v24 = v2 * v4;
1✔
NEW
142
    t.fail("3.14 * 1234567890 --> error");
×
143
  } catch (...) {
1✔
144
    t.pass("3.14 * 1234567890 --> error");
1✔
145
  }
1✔
146

147
  // real * duration -> duration
148
  Variant v25 = v2 * v5;
1✔
149
  t.is(v25.type(), Variant::type_duration, "3.14 * 1200 --> duration");
1✔
150
  t.is(v25.get_duration(), 3768, "3.14 * 1200 --> 3768");
1✔
151

152
  // string * boolean  -> string
153
  Variant v30 = v3 * v0;
1✔
154
  t.is(v30.type(), Variant::type_string, "foo * true --> real");
1✔
155
  t.is(v30.get_string(), "foo", "foo * true --> foo");
1✔
156

157
  // string * integer  -> string
158
  Variant v31 = v3 * v1;
1✔
159
  t.is(v31.type(), Variant::type_string, "foo * 42 --> string");
1✔
160
  t.is(v31.get_string().substr(0, 10), "foofoofoof", "foo * 42 --> foofoofoof...");
1✔
161

162
  // string * real     -> string
163
  try {
164
    Variant v32 = v3 * v2;
1✔
NEW
165
    t.fail("foo * 3.14 --> error");
×
166
  } catch (...) {
1✔
167
    t.pass("foo * 3.14 --> error");
1✔
168
  }
1✔
169

170
  // string * string   -> string
171
  try {
172
    Variant v33 = v3 * v3;
1✔
NEW
173
    t.fail("foo * foo --> error");
×
174
  } catch (...) {
1✔
175
    t.pass("foo * foo --> error");
1✔
176
  }
1✔
177

178
  // string * date     -> string
179
  try {
180
    Variant v34 = v3 * v4;
1✔
NEW
181
    t.fail("foo * 1234567890 --> error");
×
182
  } catch (...) {
1✔
183
    t.pass("foo * 1234567890 --> error");
1✔
184
  }
1✔
185

186
  // string * duration -> string
187
  try {
188
    Variant v35 = v3 * v5;
1✔
NEW
189
    t.fail("foo * 1200 --> error");
×
190
  } catch (...) {
1✔
191
    t.pass("foo * 1200 --> error");
1✔
192
  }
1✔
193

194
  // date * boolean  -> ERROR
195
  try {
196
    Variant v40 = v4 * v0;
1✔
NEW
197
    t.fail("1234567890 * true --> error");
×
198
  } catch (...) {
1✔
199
    t.pass("1234567890 * true --> error");
1✔
200
  }
1✔
201

202
  // date * integer  -> ERROR
203
  try {
204
    Variant v41 = v4 * v1;
1✔
NEW
205
    t.fail("1234567890 * 42 --> error");
×
206
  } catch (...) {
1✔
207
    t.pass("1234567890 * 42 --> error");
1✔
208
  }
1✔
209

210
  // date * real     -> ERROR
211
  try {
212
    Variant v42 = v4 * v2;
1✔
NEW
213
    t.fail("1234567890 * 3.14 --> error");
×
214
  } catch (...) {
1✔
215
    t.pass("1234567890 * 3.14 --> error");
1✔
216
  }
1✔
217

218
  // date * string   -> ERROR
219
  try {
220
    Variant v43 = v4 * v3;
1✔
NEW
221
    t.fail("1234567890 * foo --> error");
×
222
  } catch (...) {
1✔
223
    t.pass("1234567890 * foo --> error");
1✔
224
  }
1✔
225

226
  // date * date     -> ERROR
227
  try {
228
    Variant v44 = v4 * v4;
1✔
NEW
229
    t.fail("1234567890 * 1234567890 --> error");
×
230
  } catch (...) {
1✔
231
    t.pass("1234567890 * 1234567890 --> error");
1✔
232
  }
1✔
233

234
  // date * duration -> ERROR
235
  try {
236
    Variant v45 = v4 * v5;
1✔
NEW
237
    t.fail("1234567890 * 1200 --> error");
×
238
  } catch (...) {
1✔
239
    t.pass("1234567890 * 1200 --> error");
1✔
240
  }
1✔
241

242
  // duration * boolean  -> duration
243
  Variant v50 = v5 * v0;
1✔
244
  t.is(v50.type(), Variant::type_duration, "1200 * true --> duration");
1✔
245
  t.is(v50.get_duration(), 1200, "1200 * true --> 1200");
1✔
246

247
  // duration * integer  -> duration
248
  Variant v51 = v5 * v1;
1✔
249
  t.is(v51.type(), Variant::type_duration, "1200 * 42 --> duration");
1✔
250
  t.is(v51.get_duration(), 50400, "1200 * 42 --> 50400");
1✔
251

252
  // duration * real     -> duration
253
  Variant v52 = v5 * v2;
1✔
254
  t.is(v52.type(), Variant::type_duration, "1200 * 3.14 --> duration");
1✔
255
  t.is(v52.get_duration(), 3768, "1200 * 3.14 --> 3768");
1✔
256

257
  // duration * string   -> string
258
  try {
259
    Variant v53 = v5 * v3;
1✔
NEW
260
    t.fail("1200 * foo --> error");
×
261
  } catch (...) {
1✔
262
    t.pass("1200 * foo --> error");
1✔
263
  }
1✔
264

265
  // duration * date     -> date
266
  try {
267
    Variant v54 = v5 * v4;
1✔
NEW
268
    t.fail("1200 * 1234567890 --> error");
×
269
  } catch (...) {
1✔
270
    t.pass("1200 * 1234567890 --> error");
1✔
271
  }
1✔
272

273
  // duration * duration -> duration
274
  try {
275
    Variant v55 = v5 * v5;
1✔
NEW
276
    t.fail("1200 * 1200 --> error");
×
277
  } catch (...) {
1✔
278
    t.pass("1200 * 1200 --> error");
1✔
279
  }
1✔
280

281
  return 0;
1✔
282
}
1✔
283

284
////////////////////////////////////////////////////////////////////////////////
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc