1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99 | 1
1
1
3
3
3
3
3
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
| Eif (typeof (window) === 'undefined') var loki = require('../../src/lokijs.js');
describe('sorting and indexing', function () {
beforeEach(function () {
db = new loki('sortingIndexingTest'),
items = db.addCollection('items');
items.insert({ name : 'mjolnir', owner: 'thor', maker: 'dwarves' });
items.insert({ name : 'gungnir', owner: 'odin', maker: 'elves' });
items.insert({ name : 'tyrfing', owner: 'Svafrlami', maker: 'dwarves' });
items.insert({ name : 'draupnir', owner: 'odin', maker: 'elves' });
});
describe('resultset simplesort', function() {
it('works', function () {
var rss = db.addCollection('rssort');
rss.insert({ a: 4, b: 2 });
rss.insert({ a: 7, b: 1 });
rss.insert({ a: 3, b: 4 });
rss.insert({ a: 9, b: 5 });
var results = rss.chain().simplesort('a').data();
expect(results[0].a).toBe(3);
expect(results[1].a).toBe(4);
expect(results[2].a).toBe(7);
expect(results[3].a).toBe(9);
});
});
describe('resultset simplesort with dates', function() {
it('works', function() {
var now = new Date().getTime();
var dt1 = new Date(now - 1000);
var dt2 = new Date(now + 5000);
var dt3 = new Date(2000, 6, 1);
var dt4 = new Date(now + 2000);
var dt5 = new Date(now - 3000);
var rss = db.addCollection('rssort');
rss.insert({ a: 1, b: dt1 });
rss.insert({ a: 2, b: dt2 });
rss.insert({ a: 3, b: dt3 });
rss.insert({ a: 4, b: dt4 });
rss.insert({ a: 5, b: dt5 });
var results = rss.chain().simplesort('b').data();
expect(results[0].a).toBe(3);
expect(results[1].a).toBe(5);
expect(results[2].a).toBe(1);
expect(results[3].a).toBe(4);
expect(results[4].a).toBe(2);
});
});
describe('collection indexing', function() {
it('works', function() {
var now = new Date().getTime();
var dt1 = new Date(now - 1000);
var dt2 = new Date(now + 5000);
var dt3 = new Date(2000, 6, 1);
var dt4 = new Date(now + 2000);
var dt5 = new Date(now - 3000);
var cidx = db.addCollection('collidx', { indices : ['b']});
cidx.insert({ a: 1, b: dt1 });
cidx.insert({ a: 2, b: dt2 });
cidx.insert({ a: 3, b: dt3 });
cidx.insert({ a: 4, b: dt4 });
cidx.insert({ a: 5, b: dt5 });
// force index build while simultaneously testing date equality test
var results = cidx.find({'b': dt2 });
expect(results[0].a).toBe(2);
// now search for date value equal to dt2 (yet separate object instances)
// this should not work when using the default $eq
var sdt = new Date(now + 5000);
results = cidx.find({'b': sdt});
expect(results.length).toBe(0);
// now try with new $dteq operator
results = cidx.find({'b': {'$dteq': sdt}});
expect(results.length).toBe(1);
expect(results[0].a).toBe(2);
// now verify indices
// they are array of 'positions' so both array index and value are zero based
expect(cidx.binaryIndices.b.values[0]).toBe(2);
expect(cidx.binaryIndices.b.values[1]).toBe(4);
expect(cidx.binaryIndices.b.values[2]).toBe(0);
expect(cidx.binaryIndices.b.values[3]).toBe(3);
expect(cidx.binaryIndices.b.values[4]).toBe(1);
});
});
}); |