|
1 | 1 | import { deepStrictEqual } from 'node:assert' |
2 | 2 | import test from 'node:test' |
3 | | -import { crc32c, DynamicBuffer } from '../../src/index.ts' |
| 3 | +import { DynamicBuffer, jsCRC32C, loadNativeCRC32C } from '../../src/index.ts' |
4 | 4 |
|
5 | 5 | // Samples copied from https://github.com/tulios/kafkajs/blob/55b0b416308b9e597a5a6b97b0a6fd6b846255dc/src/protocol/recordBatch/crc32c/fixtures/samples.js |
6 | 6 | const samples = [ |
@@ -68,29 +68,36 @@ const java = Buffer.from([ |
68 | 68 | 57, 100, 102, 102, 99, 52, 97, 97, 99, 57, 2, 2, 97, 2, 98 |
69 | 69 | ]) |
70 | 70 |
|
71 | | -test('perform crc32c computations', () => { |
72 | | - const longString = |
73 | | - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi mollis cursus metus vel tristique. Proin congue massa massa, a malesuada dolor ullamcorper a. Nulla eget leo vel orci venenatis placerat. Donec semper condimentum justo, vel sollicitudin dolor consequat id. Nunc sed aliquet felis, eget congue nisi. Mauris eu justo suscipit, elementum turpis ut, molestie tellus. Mauris ornare rutrum fringilla. Nulla dignissim luctus pretium. Nullam nec eros hendrerit sapien pellentesque sollicitudin. Integer eget ligula dui. Mauris nec cursus nibh. Nunc interdum elementum leo, eu sagittis eros sodales nec. Duis dictum nulla sed tincidunt malesuada. Quisque in vulputate sapien. Sed sit amet tellus a est porta rhoncus sed eu metus. Mauris non pulvinar nisl, volutpat luctus enim. Suspendisse est nisi, sagittis at risus quis, ultricies rhoncus sem. Donec ullamcorper purus eget sapien facilisis, eu eleifend felis viverra. Suspendisse elit neque, semper aliquet neque sed, egestas tempus leo. Duis condimentum turpis duis.' |
74 | | - const buffer = Buffer.from(longString) |
75 | | - deepStrictEqual(crc32c(new DynamicBuffer(buffer)), 1796588439) |
76 | | -}) |
| 71 | +const implementations = { |
| 72 | + Javascript: jsCRC32C, |
| 73 | + Native: loadNativeCRC32C()! |
| 74 | +} |
77 | 75 |
|
78 | | -test('match the java crc32c code', () => { |
79 | | - deepStrictEqual(crc32c(new DynamicBuffer(java)), 818496390) |
80 | | - deepStrictEqual(crc32c(java), 818496390) |
81 | | -}) |
| 76 | +for (const [name, implementation] of Object.entries(implementations)) { |
| 77 | + test(`perform crc32c computations (${name})`, () => { |
| 78 | + const longString = |
| 79 | + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi mollis cursus metus vel tristique. Proin congue massa massa, a malesuada dolor ullamcorper a. Nulla eget leo vel orci venenatis placerat. Donec semper condimentum justo, vel sollicitudin dolor consequat id. Nunc sed aliquet felis, eget congue nisi. Mauris eu justo suscipit, elementum turpis ut, molestie tellus. Mauris ornare rutrum fringilla. Nulla dignissim luctus pretium. Nullam nec eros hendrerit sapien pellentesque sollicitudin. Integer eget ligula dui. Mauris nec cursus nibh. Nunc interdum elementum leo, eu sagittis eros sodales nec. Duis dictum nulla sed tincidunt malesuada. Quisque in vulputate sapien. Sed sit amet tellus a est porta rhoncus sed eu metus. Mauris non pulvinar nisl, volutpat luctus enim. Suspendisse est nisi, sagittis at risus quis, ultricies rhoncus sem. Donec ullamcorper purus eget sapien facilisis, eu eleifend felis viverra. Suspendisse elit neque, semper aliquet neque sed, egestas tempus leo. Duis condimentum turpis duis.' |
| 80 | + const buffer = Buffer.from(longString) |
| 81 | + deepStrictEqual(implementation(new DynamicBuffer(buffer)), 1796588439) |
| 82 | + }) |
82 | 83 |
|
83 | | -test('samples', () => { |
84 | | - for (const sample of samples) { |
85 | | - const buffer = Buffer.from(sample.input) |
86 | | - deepStrictEqual(crc32c(new DynamicBuffer(buffer)), sample.output) |
87 | | - } |
88 | | -}) |
| 84 | + test(`match the java crc32c code (${name})`, () => { |
| 85 | + deepStrictEqual(implementation(new DynamicBuffer(java)), 818496390) |
| 86 | + deepStrictEqual(implementation(java), 818496390) |
| 87 | + }) |
| 88 | + |
| 89 | + test(`samples (${name})`, () => { |
| 90 | + for (const sample of samples) { |
| 91 | + const buffer = Buffer.from(sample.input) |
| 92 | + deepStrictEqual(implementation(new DynamicBuffer(buffer)), sample.output) |
| 93 | + } |
| 94 | + }) |
89 | 95 |
|
90 | | -test('empty', () => { |
91 | | - deepStrictEqual(crc32c(new DynamicBuffer(Buffer.alloc(0))), 0) |
92 | | -}) |
| 96 | + test(`empty (${name})`, () => { |
| 97 | + deepStrictEqual(implementation(new DynamicBuffer(Buffer.alloc(0))), 0) |
| 98 | + }) |
93 | 99 |
|
94 | | -test('unicode null', () => { |
95 | | - deepStrictEqual(crc32c(new DynamicBuffer(Buffer.from('\u0000'))), 1383945041) |
96 | | -}) |
| 100 | + test(`unicode null (${name})`, () => { |
| 101 | + deepStrictEqual(implementation(new DynamicBuffer(Buffer.from('\u0000'))), 1383945041) |
| 102 | + }) |
| 103 | +} |
0 commit comments