1/*
2 * Copyright (C) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect, Assert} from 'deccjsunit/index';
17import dataRdb from '@ohos.data.rdb';
18import deviceInfo from '@ohos.deviceInfo';
19
20const TAG = "[RDB_PREDICATES_PERF]";
21
22const BASE_COUNT = 2000; // loop times
23const BASE_COUNT_FIRST = 200;
24const BASE_COUNT_SECOND = 10;
25const BASE_LINE_TABLE = 500; // callback tablet base line
26const BASE_LINE_PHONE = 1000; // callback phone base line
27const BASE_LINE = (deviceInfo.deviceType == "tablet" || deviceInfo.deviceType == "2in1") ? BASE_LINE_TABLE : BASE_LINE_PHONE;
28
29describe('predicatesPerf', function () {
30  beforeAll(async function () {
31    console.info(TAG + 'beforeAll');
32  })
33  beforeEach(async function () {
34    console.info(TAG + 'beforeEach');
35  })
36  afterEach(async function () {
37    console.info(TAG + 'afterEach');
38  })
39  afterAll(async function () {
40    console.info(TAG + 'afterAll');
41  })
42
43  console.log(TAG + "*************Unit Test Begin*************");
44
45  it('SUB_DDM_PERF_RDB_Predicates_inDevices_001', 0, async function (done) {
46    let startTime = new Date().getTime();
47    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
48      let predicates = new dataRdb.RdbPredicates("test");
49      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
50        predicates.inDevices(['123']);
51      }
52    }
53    let endTime = new Date().getTime();
54    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
55    console.info(TAG + " the Predicates_inDevices average time is: " + averageTime + " μs");
56    expect(averageTime < BASE_LINE).assertTrue();
57    done();
58  })
59
60  it('SUB_DDM_PERF_RDB_Predicates_inAllDevices_001', 0, async function (done) {
61    let startTime = new Date().getTime();
62    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
63      let predicates = new dataRdb.RdbPredicates("test");
64      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
65        predicates.inAllDevices();
66      }
67    }
68    let endTime = new Date().getTime();
69    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
70    console.info(TAG + " the Predicates_inAllDevices average time is: " + averageTime + " μs");
71    expect(averageTime < BASE_LINE).assertTrue();
72    done();
73  })
74
75  it('SUB_DDM_PERF_RDB_Predicates_equalTo_001', 0, async function (done) {
76    let startTime = new Date().getTime();
77    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
78      let predicates = new dataRdb.RdbPredicates("test");
79      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
80        predicates.equalTo("name", "lisi");
81      }
82    }
83    let endTime = new Date().getTime();
84    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
85    console.info(TAG + " the Predicates_equalTo average time is: " + averageTime + " μs");
86    expect(averageTime < BASE_LINE).assertTrue();
87    done();
88  })
89
90  it('SUB_DDM_PERF_RDB_Predicates_notEqualTo_001', 0, async function (done) {
91    let startTime = new Date().getTime();
92    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
93      let predicates = new dataRdb.RdbPredicates("test");
94      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
95        predicates.notEqualTo("name", "lisi");
96      }
97    }
98    let endTime = new Date().getTime();
99    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
100    console.info(TAG + " the Predicates_notEqualTo average time is: " + averageTime + " μs");
101    expect(averageTime < BASE_LINE).assertTrue();
102    done();
103  })
104
105  it('SUB_DDM_PERF_RDB_Predicates_beginWrap_001', 0, async function (done) {
106    let startTime = new Date().getTime();
107    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
108      let predicates = new dataRdb.RdbPredicates("test");
109      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
110        predicates.beginWrap();
111      }
112    }
113    let endTime = new Date().getTime();
114    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
115    console.info(TAG + " the Predicates_beginWrap average time is: " + averageTime + " μs");
116    expect(averageTime < BASE_LINE).assertTrue();
117    done();
118  })
119
120  it('SUB_DDM_PERF_RDB_Predicates_endWrap_001', 0, async function (done) {
121    let startTime = new Date().getTime();
122    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
123      let predicates = new dataRdb.RdbPredicates("test");
124      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
125        predicates.equalTo("name", "lisi");
126        predicates.endWrap();
127      }
128    }
129    let endTime = new Date().getTime();
130    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
131    console.info(TAG + " the Predicates_endWrap average time is: " + averageTime + " μs");
132    expect(averageTime < BASE_LINE).assertTrue();
133    done();
134  })
135
136  it('SUB_DDM_PERF_RDB_Predicates_or_001', 0, async function (done) {
137    let startTime = new Date().getTime();
138    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
139      let predicates = new dataRdb.RdbPredicates("test");
140      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
141        predicates.equalTo("name", "lisi");
142        predicates.or();
143        predicates.equalTo("age", 18);
144      }
145    }
146    let endTime = new Date().getTime();
147    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
148    console.info(TAG + " the Predicates_or average time is: " + averageTime + " μs");
149    expect(averageTime < BASE_LINE).assertTrue();
150    done();
151  })
152
153  it('SUB_DDM_PERF_RDB_Predicates_and_001', 1, async function (done) {
154    let startTime = new Date().getTime();
155    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
156      let predicates = new dataRdb.RdbPredicates("test");
157      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
158        predicates.equalTo("name", "lisi");
159        predicates.and();
160        predicates.equalTo("name", "zs");
161      }
162    }
163    let endTime = new Date().getTime();
164    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
165    console.info(TAG + " the Predicates_and average time is: " + averageTime + " μs");
166    expect(averageTime < BASE_LINE).assertTrue();
167    done();
168  })
169
170  it('SUB_DDM_PERF_RDB_Predicates_contains_001', 0, async function (done) {
171    let startTime = new Date().getTime();
172    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
173      let predicates = new dataRdb.RdbPredicates("test");
174      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
175        predicates.contains("name", "lisi");
176      }
177    }
178    let endTime = new Date().getTime();
179    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
180    console.info(TAG + " the Predicates_contains average time is: " + averageTime + " μs");
181    expect(averageTime < BASE_LINE).assertTrue();
182    done();
183  })
184
185  it('SUB_DDM_PERF_RDB_Predicates_beginsWith_001', 0, async function (done) {
186    let startTime = new Date().getTime();
187    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
188      let predicates = new dataRdb.RdbPredicates("test");
189      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
190        predicates.beginsWith("name", "lisi");
191      }
192    }
193    let endTime = new Date().getTime();
194    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
195    console.info(TAG + " the Predicates_beginsWith average time is: " + averageTime + " μs");
196    expect(averageTime < BASE_LINE).assertTrue();
197    done();
198  })
199
200  it('SUB_DDM_PERF_RDB_Predicates_endWith_001', 0, async function (done) {
201    let startTime = new Date().getTime();
202    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
203      let predicates = new dataRdb.RdbPredicates("test");
204      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
205        predicates.endsWith("name", "lisi");
206      }
207    }
208    let endTime = new Date().getTime();
209    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
210    console.info(TAG + " the Predicates_endWith average time is: " + averageTime + " μs");
211    expect(averageTime < BASE_LINE).assertTrue();
212    done();
213  })
214
215  it('SUB_DDM_PERF_RDB_Predicates_isNull_001', 0, async function (done) {
216    let startTime = new Date().getTime();
217    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
218      let predicates = new dataRdb.RdbPredicates("test");
219      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
220        predicates.isNull("name");
221      }
222    }
223    let endTime = new Date().getTime();
224    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
225    console.info(TAG + " the Predicates_isNull average time is: " + averageTime + " μs");
226    expect(averageTime < BASE_LINE).assertTrue();
227    done();
228  })
229
230  it('SUB_DDM_PERF_RDB_Predicates_isNotNull_001', 0, async function (done) {
231    let startTime = new Date().getTime();
232    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
233      let predicates = new dataRdb.RdbPredicates("test");
234      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
235        predicates.isNotNull("name");
236      }
237    }
238    let endTime = new Date().getTime();
239    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
240    console.info(TAG + " the Predicates_isNotNull average time is: " + averageTime + " μs");
241    expect(averageTime < BASE_LINE).assertTrue();
242    done();
243  })
244
245  it('SUB_DDM_PERF_RDB_Predicates_like_001', 0, async function (done) {
246    let startTime = new Date().getTime();
247    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
248      let predicates = new dataRdb.RdbPredicates("test");
249      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
250        predicates.like("name", "li");
251      }
252    }
253    let endTime = new Date().getTime();
254    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
255    console.info(TAG + " the Predicates_like average time is: " + averageTime + " μs");
256    expect(averageTime < BASE_LINE).assertTrue();
257    done();
258  })
259
260  it('SUB_DDM_PERF_RDB_Predicates_glob_001', 0, async function (done) {
261    let startTime = new Date().getTime();
262    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
263      let predicates = new dataRdb.RdbPredicates("test");
264      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
265        predicates.glob("name", "li");
266      }
267    }
268    let endTime = new Date().getTime();
269    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
270    console.info(TAG + " the Predicates_glob average time is: " + averageTime + " μs");
271    expect(averageTime < BASE_LINE).assertTrue();
272    done();
273  })
274
275  it('SUB_DDM_PERF_RDB_Predicates_between_001', 0, async function (done) {
276    let startTime = new Date().getTime();
277    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
278      let predicates = new dataRdb.RdbPredicates("test");
279      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
280        predicates.between("age", 1, 100);
281      }
282    }
283    let endTime = new Date().getTime();
284    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
285    console.info(TAG + " the Predicates_between average time is: " + averageTime + " μs");
286    expect(averageTime < BASE_LINE).assertTrue();
287    done();
288  })
289
290  it('SUB_DDM_PERF_RDB_Predicates_notBetween_001', 0, async function (done) {
291    let startTime = new Date().getTime();
292    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
293      let predicates = new dataRdb.RdbPredicates("test");
294      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
295        predicates.notBetween("age", 1, 100);
296      }
297    }
298    let endTime = new Date().getTime();
299    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
300    console.info(TAG + " the Predicates_notBetween average time is: " + averageTime + " μs");
301    expect(averageTime < BASE_LINE).assertTrue();
302    done();
303  })
304
305  it('SUB_DDM_PERF_RDB_Predicates_greaterThan_001', 0, async function (done) {
306    let startTime = new Date().getTime();
307    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
308      let predicates = new dataRdb.RdbPredicates("test");
309      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
310        predicates.greaterThan("age", 1);
311      }
312    }
313    let endTime = new Date().getTime();
314    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
315    console.info(TAG + " the Predicates_greaterThan average time is: " + averageTime + " μs");
316    expect(averageTime < BASE_LINE).assertTrue();
317    done();
318  })
319
320  it('SUB_DDM_PERF_RDB_Predicates_lessThan_001', 0, async function (done) {
321    let startTime = new Date().getTime();
322    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
323      let predicates = new dataRdb.RdbPredicates("test");
324      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
325        predicates.lessThan("age", 1000);
326      }
327    }
328    let endTime = new Date().getTime();
329    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
330    console.info(TAG + " the Predicates_lessThan average time is: " + averageTime + " μs");
331    expect(averageTime < BASE_LINE).assertTrue();
332    done();
333  })
334
335  it('SUB_DDM_PERF_RDB_Predicates_greaterThanOrEqualTo_001', 0, async function (done) {
336    let startTime = new Date().getTime();
337    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
338      let predicates = new dataRdb.RdbPredicates("test");
339      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
340        predicates.greaterThanOrEqualTo("age", 1000);
341      }
342    }
343    let endTime = new Date().getTime();
344    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
345    console.info(TAG + " the Predicates_greaterThanOrEqualTo average time is: " + averageTime + " μs");
346    expect(averageTime < BASE_LINE).assertTrue();
347    done();
348  })
349
350  it('SUB_DDM_PERF_RDB_Predicates_lessThanOrEqualTo_001', 0, async function (done) {
351    let startTime = new Date().getTime();
352    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
353      let predicates = new dataRdb.RdbPredicates("test");
354      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
355        predicates.lessThanOrEqualTo("age", 1000);
356      }
357    }
358    let endTime = new Date().getTime();
359    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
360    console.info(TAG + " the Predicates_lessThanOrEqualTo average time is: " + averageTime + " μs");
361    expect(averageTime < BASE_LINE).assertTrue();
362    done();
363  })
364
365  it('SUB_DDM_PERF_RDB_Predicates_orderByAsc_001', 0, async function (done) {
366    let startTime = new Date().getTime();
367    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
368      let predicates = new dataRdb.RdbPredicates("test");
369      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
370        predicates.orderByAsc("name");
371      }
372    }
373    let endTime = new Date().getTime();
374    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
375    console.info(TAG + " the Predicates_orderByAsc average time is: " + averageTime + " μs");
376    expect(averageTime < BASE_LINE).assertTrue();
377    done();
378  })
379
380  it('SUB_DDM_PERF_RDB_Predicates_orderByDesc_001', 0, async function (done) {
381    let startTime = new Date().getTime();
382    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
383      let predicates = new dataRdb.RdbPredicates("test");
384      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
385        predicates.orderByDesc("name");
386      }
387    }
388    let endTime = new Date().getTime();
389    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
390    console.info(TAG + " the Predicates_orderByDesc average time is: " + averageTime + " μs");
391    expect(averageTime < BASE_LINE).assertTrue();
392    done();
393  })
394
395  it('SUB_DDM_PERF_RDB_Predicates_distinct_001', 0, async function (done) {
396    let startTime = new Date().getTime();
397    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
398      let predicates = new dataRdb.RdbPredicates("test");
399      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
400        predicates.distinct();
401      }
402    }
403    let endTime = new Date().getTime();
404    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
405    console.info(TAG + " the Predicates_distinct average time is: " + averageTime + " μs");
406    expect(averageTime < BASE_LINE).assertTrue();
407    done();
408  })
409
410  it('SUB_DDM_PERF_RDB_Predicates_limitAs_001', 0, async function (done) {
411    let startTime = new Date().getTime();
412    for (let i = 0; i < BASE_COUNT; i++) {
413      let predicates = new dataRdb.RdbPredicates("test");
414      predicates.limitAs(6);
415    }
416    let endTime = new Date().getTime();
417    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
418    console.info(TAG + " the Predicates_limitAs average time is: " + averageTime + " μs");
419    expect(averageTime < BASE_LINE).assertTrue();
420    done();
421  })
422
423  it('SUB_DDM_PERF_RDB_Predicates_offsetAs_001', 0, async function (done) {
424    let startTime = new Date().getTime();
425    for (let i = 0; i < BASE_COUNT; i++) {
426      let predicates = new dataRdb.RdbPredicates("test");
427      predicates.offsetAs(6);
428    }
429    let endTime = new Date().getTime();
430    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
431    console.info(TAG + " the Predicates_offsetAs average time is: " + averageTime + " μs");
432    expect(averageTime < BASE_LINE).assertTrue();
433    done();
434  })
435
436  it('SUB_DDM_PERF_RDB_Predicates_groupBy_001', 0, async function (done) {
437    let nameArr = new Array();
438    nameArr.push("id");
439    nameArr.push("name");
440    let startTime = new Date().getTime();
441    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
442      let predicates = new dataRdb.RdbPredicates("test");
443      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
444        predicates.groupBy(nameArr);
445      }
446    }
447    let endTime = new Date().getTime();
448    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
449    console.info(TAG + " the Predicates_groupBy average time is: " + averageTime + " μs");
450    expect(averageTime < BASE_LINE).assertTrue();
451    done();
452  })
453
454  it('SUB_DDM_PERF_RDB_Predicates_indexedBy_001', 0, async function (done) {
455    let startTime = new Date().getTime();
456    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
457      let predicates = new dataRdb.RdbPredicates("test");
458      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
459        predicates.indexedBy("name");
460      }
461    }
462    let endTime = new Date().getTime();
463    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
464    console.info(TAG + " the Predicates_indexedBy average time is: " + averageTime + " μs");
465    expect(averageTime < BASE_LINE).assertTrue();
466    done();
467  })
468
469  it('SUB_DDM_PERF_RDB_Predicates_in_001', 0, async function (done) {
470    let nameArr = new Array();
471    nameArr.push("id");
472    nameArr.push("name");
473    let startTime = new Date().getTime();
474    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
475      let predicates = new dataRdb.RdbPredicates("test");
476      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
477        predicates.in("name", nameArr);
478      }
479    }
480    let endTime = new Date().getTime();
481    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
482    console.info(TAG + " the Predicates_in average time is: " + averageTime + " μs");
483    expect(averageTime < BASE_LINE).assertTrue();
484    done();
485  })
486
487  it('SUB_DDM_PERF_RDB_Predicates_notIn(_001', 0, async function (done) {
488    let nameArr = new Array();
489    nameArr.push("zhangsan");
490    nameArr.push("lisi");
491    let startTime = new Date().getTime();
492    for (let i = 0; i < BASE_COUNT_FIRST; i++) {
493      let predicates = new dataRdb.RdbPredicates("test");
494      for (let j = 0; j < BASE_COUNT_SECOND; j++) {
495        predicates.notIn("name", nameArr);
496      }
497    }
498    let endTime = new Date().getTime();
499    let averageTime = ((endTime - startTime) * 1000) / BASE_COUNT;
500    console.info(TAG + " the Predicates_notIn average time is: " + averageTime + " μs");
501    expect(averageTime < BASE_LINE).assertTrue();
502    done();
503  })
504
505  console.info(TAG + "*************Unit Test End*************")
506})