Skip to content

Commit fc1bd37

Browse files
Better test
1 parent 2a4af04 commit fc1bd37

File tree

2 files changed

+71
-85
lines changed

2 files changed

+71
-85
lines changed

packages/firestore/src/local/indexeddb_index_manager.ts

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -860,29 +860,26 @@ export class IndexedDbIndexManager implements IndexManager {
860860
const lowerBound = new Uint8Array(indexRange.lower[3]);
861861
const upperBound = new Uint8Array(indexRange.upper[3]);
862862

863-
let lastLower = lowerBound;
864-
let lowerOpen = indexRange.lowerOpen;
863+
let lastBound = lowerBound;
864+
let lastOpen = indexRange.lowerOpen;
865865

866-
const barriers = [...notInValues, upperBound];
867-
for (const barrier of barriers) {
866+
const bounds = [...notInValues, upperBound];
867+
for (const currentBound of bounds) {
868868
// Verify that the range in the bound is sensible, as the bound may get
869869
// rejected otherwise
870-
const sortsAfter = compareByteArrays(barrier, lastLower);
871-
const sortsBefore = compareByteArrays(barrier, upperBound);
872-
if (
873-
(lowerOpen ? sortsAfter > 0 : sortsAfter >= 0) &&
874-
sortsBefore <= 0
875-
) {
870+
const sortsAfter = compareByteArrays(currentBound, lastBound);
871+
const sortsBefore = compareByteArrays(currentBound, upperBound);
872+
if ((lastOpen ? sortsAfter > 0 : sortsAfter >= 0) && sortsBefore <= 0) {
876873
ranges.push(
877874
IDBKeyRange.bound(
878-
this.generateBound(indexRange.lower, lastLower),
879-
this.generateBound(indexRange.lower, barrier),
880-
lowerOpen,
881-
/* upperOpen= */ false
875+
this.generateBound(indexRange.lower, lastBound),
876+
this.generateBound(indexRange.lower, currentBound),
877+
lastOpen,
878+
/* upperOpen= */ indexRange.upperOpen
882879
)
883880
);
884-
lowerOpen = true;
885-
lastLower = successor(barrier);
881+
lastOpen = true;
882+
lastBound = successor(currentBound);
886883
}
887884
}
888885
}

packages/firestore/test/unit/local/index_manager.test.ts

Lines changed: 58 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ import {
5858

5959
import * as persistenceHelpers from './persistence_test_helpers';
6060
import { TestIndexManager } from './test_index_manager';
61+
import { FieldFilter } from '../../../src/core/target';
6162

6263
describe('MemoryIndexManager', async () => {
6364
genericIndexManagerTests(persistenceHelpers.testMemoryEagerPersistence);
@@ -348,77 +349,65 @@ describe('IndexedDbIndexManager', async () => {
348349

349350
it('applies equals with not equals filter on same field', async () => {
350351
await setUpSingleValueFilter();
351-
let q = queryWithAddedFilter(
352-
queryWithAddedFilter(query('coll'), filter('count', '>', 1)),
353-
filter('count', '!=', 2)
354-
);
355-
await verifyResults(q, 'coll/val3');
356-
357-
q = queryWithAddedFilter(
358-
queryWithAddedFilter(query('coll'), filter('count', '==', 1)),
359-
filter('count', '!=', 2)
360-
);
361-
await verifyResults(q, 'coll/val1');
362-
363-
q = queryWithAddedFilter(
364-
queryWithAddedFilter(query('coll'), filter('count', '==', 1)),
365-
filter('count', '!=', 1)
366-
);
367-
await verifyResults(q);
368-
369-
q = queryWithAddedFilter(
370-
queryWithAddedFilter(query('coll'), filter('count', '>', 2)),
371-
filter('count', '!=', 2)
372-
);
373-
await verifyResults(q, 'coll/val3');
374352

375-
q = queryWithAddedFilter(
376-
queryWithAddedFilter(query('coll'), filter('count', '>=', 2)),
377-
filter('count', '!=', 2)
378-
);
379-
await verifyResults(q, 'coll/val3');
380-
381-
q = queryWithAddedFilter(
382-
queryWithAddedFilter(query('coll'), filter('count', '<=', 2)),
383-
filter('count', '!=', 2)
384-
);
385-
await verifyResults(q, 'coll/val1');
386-
387-
q = queryWithAddedFilter(
388-
queryWithAddedFilter(query('coll'), filter('count', '<=', 2)),
389-
filter('count', '!=', 1)
390-
);
391-
await verifyResults(q, 'coll/val2');
392-
393-
q = queryWithAddedFilter(
394-
queryWithAddedFilter(query('coll'), filter('count', '<', 2)),
395-
filter('count', '!=', 2)
396-
);
397-
await verifyResults(q, 'coll/val1');
398-
399-
q = queryWithAddedFilter(
400-
queryWithAddedFilter(query('coll'), filter('count', '<', 2)),
401-
filter('count', '!=', 1)
402-
);
403-
await verifyResults(q);
404-
405-
q = queryWithAddedFilter(
406-
queryWithAddedFilter(query('coll'), filter('count', '>', 2)),
407-
filter('count', 'not-in', [3])
408-
);
409-
await verifyResults(q);
410-
411-
q = queryWithAddedFilter(
412-
queryWithAddedFilter(query('coll'), filter('count', '>', 2)),
413-
filter('count', 'not-in', [2, 2])
414-
);
415-
await verifyResults(q, 'coll/val3');
416-
});
353+
const filtersAndResults: Array<FieldFilter[] | string[]> = [
354+
[filter('count', '>', 1), filter('count', '!=', 2)],
355+
['coll/val3'],
356+
[filter('count', '==', 1), filter('count', '!=', 2)],
357+
['coll/val1'],
358+
[filter('count', '==', 1), filter('count', '!=', 1)],
359+
[],
360+
[filter('count', '>', 2), filter('count', '!=', 2)],
361+
['coll/val3'],
362+
[filter('count', '>=', 2), filter('count', '!=', 2)],
363+
['coll/val3'],
364+
[filter('count', '<=', 2), filter('count', '!=', 2)],
365+
['coll/val1'],
366+
[filter('count', '<=', 2), filter('count', '!=', 1)],
367+
['coll/val2'],
368+
[filter('count', '<', 2), filter('count', '!=', 2)],
369+
['coll/val1'],
370+
[filter('count', '<', 2), filter('count', '!=', 1)],
371+
[],
372+
[filter('count', '>', 2), filter('count', 'not-in', [3])],
373+
[],
374+
[filter('count', '>=', 2), filter('count', 'not-in', [3])],
375+
['coll/val2'],
376+
[filter('count', '>=', 2), filter('count', 'not-in', [3, 3])],
377+
['coll/val2'],
378+
[
379+
filter('count', '>', 1),
380+
filter('count', '<', 3),
381+
filter('count', '!=', 2)
382+
],
383+
[],
384+
[
385+
filter('count', '>=', 1),
386+
filter('count', '<', 3),
387+
filter('count', '!=', 2)
388+
],
389+
['coll/val1'],
390+
[
391+
filter('count', '>=', 1),
392+
filter('count', '<=', 3),
393+
filter('count', '!=', 2)
394+
],
395+
['coll/val1', 'coll/val3'],
396+
[
397+
filter('count', '>', 1),
398+
filter('count', '<=', 3),
399+
filter('count', '!=', 2)
400+
],
401+
['coll/val3']
402+
];
417403

418-
it('applies less than filter', async () => {
419-
await setUpSingleValueFilter();
420-
const q = queryWithAddedFilter(query('coll'), filter('count', '<', 2));
421-
await verifyResults(q, 'coll/val1');
404+
for (let i = 0; i < filtersAndResults.length; i += 2) {
405+
let q = query('coll');
406+
for (const filter of filtersAndResults[i] as FieldFilter[]) {
407+
q = queryWithAddedFilter(q, filter);
408+
}
409+
await verifyResults(q, ...(filtersAndResults[i + 1] as string[]));
410+
}
422411
});
423412

424413
it('applies less than or equals filter', async () => {

0 commit comments

Comments
 (0)