|
1 | | -import { binaryHammingDistance, decimalHammingDistance } from '@/image/phash'; |
| 1 | +import { |
| 2 | + binaryHammingDistance, |
| 3 | + binaryStringHammingDistance, |
| 4 | + decimalHammingDistance, |
| 5 | +} from '@/image/phash'; |
| 6 | +import * as fs from 'fs'; |
| 7 | +import * as path from 'path'; |
2 | 8 |
|
3 | 9 | describe('images', () => { |
4 | | - const a = '1234'; |
5 | | - const b = '4321'; |
| 10 | + const a = '14870051262695068000'; |
| 11 | + const b = '6827366053207273000'; |
6 | 12 |
|
7 | 13 | it('decimal hamming distance', () => { |
8 | 14 | const hammingDistance = decimalHammingDistance(a, b); |
9 | 15 | expect(hammingDistance).toBe(6); |
10 | 16 | }); |
11 | 17 |
|
12 | 18 | it('binary hamming distance', () => { |
13 | | - const hammingDistance = binaryHammingDistance(Number(a).toString(2), Number(b).toString(2)); |
| 19 | + const _a = Number(a).toString(2); |
| 20 | + const _b = Number(b).toString(2); |
| 21 | + const hammingDistance = binaryStringHammingDistance(_a, _b); |
14 | 22 | expect(hammingDistance).toBe(6); |
| 23 | + const hammingDistance2 = binaryHammingDistance(_a, _b); |
| 24 | + expect(hammingDistance2).toBe(6); |
| 25 | + }); |
| 26 | + |
| 27 | + it('timing', () => { |
| 28 | + const data = fs.readFileSync(path.join(__dirname, 'test_public_asset.csv'), 'utf8'); |
| 29 | + const lines = data.split('\n'); |
| 30 | + const images = lines.filter((line) => line); |
| 31 | + const start = Date.now(); |
| 32 | + for (let i = 0; i < images.length; i++) { |
| 33 | + for (let j = i + 1; j < images.length; j++) { |
| 34 | + binaryHammingDistance(images[i], images[j]); |
| 35 | + } |
| 36 | + } |
| 37 | + const end = Date.now(); |
| 38 | + const start2 = Date.now(); |
| 39 | + for (let i = 0; i < images.length; i++) { |
| 40 | + for (let j = i + 1; j < images.length; j++) { |
| 41 | + binaryStringHammingDistance(images[i], images[j]); |
| 42 | + } |
| 43 | + } |
| 44 | + const end2 = Date.now(); |
| 45 | + expect(end2 - start2).toBeLessThan(end - start); |
15 | 46 | }); |
16 | 47 | }); |
0 commit comments