73 lines
1.8 KiB
JavaScript
73 lines
1.8 KiB
JavaScript
import {expect, test} from 'vitest';
|
|
|
|
import Component from './component.js';
|
|
import Query from './query.js';
|
|
|
|
const A = new (Component({a: {type: 'int32', defaultValue: 420}}));
|
|
const B = new (Component({b: {type: 'int32', defaultValue: 69}}));
|
|
const C = new (Component({c: {type: 'int32'}}));
|
|
|
|
const Types = {A, B, C};
|
|
Types.A.createMany([[2], [3]]);
|
|
Types.B.createMany([[1], [2]]);
|
|
Types.C.createMany([[2], [4]]);
|
|
|
|
function testQuery(parameters, expected) {
|
|
const query = new Query(parameters, Types);
|
|
query.reindex([1, 2, 3]);
|
|
expect(query.count)
|
|
.to.equal(expected.length);
|
|
for (const _ of query.select()) {
|
|
expect(_.length)
|
|
.to.equal(parameters.filter((spec) => '!'.charCodeAt(0) !== spec.charCodeAt(0)).length + 1);
|
|
expect(expected.includes(_.pop()))
|
|
.to.equal(true);
|
|
}
|
|
}
|
|
|
|
test('can query all', () => {
|
|
testQuery([], [1, 2, 3]);
|
|
});
|
|
|
|
test('can query some', () => {
|
|
testQuery(['A'], [2, 3]);
|
|
testQuery(['A', 'B'], [2]);
|
|
});
|
|
|
|
test('can query excluding', () => {
|
|
testQuery(['!A'], [1]);
|
|
testQuery(['A', '!B'], [3]);
|
|
});
|
|
|
|
test('can deindex', () => {
|
|
const query = new Query(['A'], Types);
|
|
query.reindex([1, 2, 3]);
|
|
expect(query.count)
|
|
.to.equal(2);
|
|
query.deindex([2]);
|
|
expect(query.count)
|
|
.to.equal(1);
|
|
});
|
|
|
|
test('can reindex', () => {
|
|
const Test = new (Component({a: {type: 'int32', defaultValue: 420}}));
|
|
Test.createMany([[2], [3]]);
|
|
const query = new Query(['Test'], {Test});
|
|
query.reindex([2, 3]);
|
|
expect(query.count)
|
|
.to.equal(2);
|
|
Test.destroy(2);
|
|
query.reindex([2, 3]);
|
|
expect(query.count)
|
|
.to.equal(1);
|
|
});
|
|
|
|
test('can select', () => {
|
|
const query = new Query(['A'], Types);
|
|
query.reindex([1, 2, 3]);
|
|
const it = query.select();
|
|
const result = it.next();
|
|
expect(result.value[0].a)
|
|
.to.equal(420);
|
|
});
|