|
| 1 | +import assert from 'node:assert'; |
| 2 | +import test from 'node:test'; |
1 | 3 | import { MikroORM, EntityManager, EntitySchema } from '@mikro-orm/postgresql'; |
2 | 4 | import { VectorType, HalfvecType, BitType, SparsevecType, l2Distance, maxInnerProduct, cosineDistance, l1Distance, hammingDistance, jaccardDistance } from 'pgvector/mikro-orm'; |
3 | 5 | import { SparseVector } from 'pgvector'; |
@@ -37,59 +39,59 @@ test('example', async () => { |
37 | 39 | .orderBy({[l2Distance('embedding', [1, 1, 1])]: 'ASC'}) |
38 | 40 | .limit(5) |
39 | 41 | .getResult(); |
40 | | - expect(items.map(v => v.id)).toStrictEqual([1, 3, 2, 4]); |
41 | | - expect(items[0].embedding).toStrictEqual([1, 1, 1]); |
42 | | - expect(items[1].embedding).toStrictEqual([1, 1, 2]); |
43 | | - expect(items[2].embedding).toStrictEqual([2, 2, 2]); |
| 42 | + assert.deepEqual(items.map(v => v.id), [1, 3, 2, 4]); |
| 43 | + assert.deepEqual(items[0].embedding, [1, 1, 1]); |
| 44 | + assert.deepEqual(items[1].embedding, [1, 1, 2]); |
| 45 | + assert.deepEqual(items[2].embedding, [2, 2, 2]); |
44 | 46 |
|
45 | 47 | // L2 distance - halfvec |
46 | 48 | items = await em.createQueryBuilder(Item) |
47 | 49 | .orderBy({[l2Distance('half_embedding', [1, 1, 1])]: 'ASC'}) |
48 | 50 | .limit(5) |
49 | 51 | .getResult(); |
50 | | - expect(items.map(v => v.id)).toStrictEqual([1, 3, 2, 4]); |
| 52 | + assert.deepEqual(items.map(v => v.id), [1, 3, 2, 4]); |
51 | 53 |
|
52 | 54 | // L2 distance - sparsevec |
53 | 55 | items = await em.createQueryBuilder(Item) |
54 | 56 | .orderBy({[l2Distance('sparse_embedding', new SparseVector([1, 1, 1]))]: 'ASC'}) |
55 | 57 | .limit(5) |
56 | 58 | .getResult(); |
57 | | - expect(items.map(v => v.id)).toStrictEqual([1, 3, 2, 4]); |
| 59 | + assert.deepEqual(items.map(v => v.id), [1, 3, 2, 4]); |
58 | 60 |
|
59 | 61 | // max inner product |
60 | 62 | items = await em.createQueryBuilder(Item) |
61 | 63 | .orderBy({[maxInnerProduct('embedding', [1, 1, 1])]: 'ASC'}) |
62 | 64 | .limit(5) |
63 | 65 | .getResult(); |
64 | | - expect(items.map(v => v.id)).toStrictEqual([2, 3, 1, 4]); |
| 66 | + assert.deepEqual(items.map(v => v.id), [2, 3, 1, 4]); |
65 | 67 |
|
66 | 68 | // cosine distance |
67 | 69 | items = await em.createQueryBuilder(Item) |
68 | 70 | .orderBy({[cosineDistance('embedding', [1, 1, 1])]: 'ASC'}) |
69 | 71 | .limit(5) |
70 | 72 | .getResult(); |
71 | | - expect(items.map(v => v.id).slice(2)).toStrictEqual([3, 4]); |
| 73 | + assert.deepEqual(items.map(v => v.id).slice(2), [3, 4]); |
72 | 74 |
|
73 | 75 | // L1 distance |
74 | 76 | items = await em.createQueryBuilder(Item) |
75 | 77 | .orderBy({[l1Distance('embedding', [1, 1, 1])]: 'ASC'}) |
76 | 78 | .limit(5) |
77 | 79 | .getResult(); |
78 | | - expect(items.map(v => v.id)).toStrictEqual([1, 3, 2, 4]); |
| 80 | + assert.deepEqual(items.map(v => v.id), [1, 3, 2, 4]); |
79 | 81 |
|
80 | 82 | // Hamming distance |
81 | 83 | items = await em.createQueryBuilder(Item) |
82 | 84 | .orderBy({[hammingDistance('binary_embedding', '101')]: 'ASC'}) |
83 | 85 | .limit(5) |
84 | 86 | .getResult(); |
85 | | - expect(items.map(v => v.id)).toStrictEqual([2, 3, 1, 4]); |
| 87 | + assert.deepEqual(items.map(v => v.id), [2, 3, 1, 4]); |
86 | 88 |
|
87 | 89 | // Jaccard distance |
88 | 90 | items = await em.createQueryBuilder(Item) |
89 | 91 | .orderBy({[jaccardDistance('binary_embedding', '101')]: 'ASC'}) |
90 | 92 | .limit(5) |
91 | 93 | .getResult(); |
92 | | - expect(items.map(v => v.id)).toStrictEqual([2, 3, 1, 4]); |
| 94 | + assert.deepEqual(items.map(v => v.id), [2, 3, 1, 4]); |
93 | 95 |
|
94 | 96 | orm.close(); |
95 | 97 | }); |
0 commit comments