|
| 1 | +import { describe, it, expect } from 'bun:test' |
| 2 | +import { fillString } from '../../src/utils' |
| 3 | +import { sha1 } from '../../src/algorithms/hash/sha1' |
| 4 | + |
| 5 | +describe('sha1', () => { |
| 6 | + it('should have correct digest length', () => { |
| 7 | + const md = sha1.create() |
| 8 | + expect(md.digestLength).toBe(20) |
| 9 | + }) |
| 10 | + |
| 11 | + it('should digest the empty string', () => { |
| 12 | + const md = sha1.create() |
| 13 | + expect(md.digest().toHex()).toBe('da39a3ee5e6b4b0d3255bfef95601890afd80709') |
| 14 | + }) |
| 15 | + |
| 16 | + it('should digest "abc"', () => { |
| 17 | + const md = sha1.create() |
| 18 | + md.update('abc') |
| 19 | + expect(md.digest().toHex()).toBe('a9993e364706816aba3e25717850c26c9cd0d89d') |
| 20 | + }) |
| 21 | + |
| 22 | + it('should digest "The quick brown fox jumps over the lazy dog"', () => { |
| 23 | + const md = sha1.create() |
| 24 | + md.update('The quick brown fox jumps over the lazy dog') |
| 25 | + expect(md.digest().toHex()).toBe('2fd4e1c67a2d28fced849ee1bb76e7391b93eb12') |
| 26 | + }) |
| 27 | + |
| 28 | + it('should digest "c\'\u00E8"', () => { |
| 29 | + const md = sha1.create() |
| 30 | + md.update('c\'\u00E8', 'utf8') |
| 31 | + expect(md.digest().toHex()).toBe('98c9a3f804daa73b68a5660d032499a447350c0d') |
| 32 | + }) |
| 33 | + |
| 34 | + it('should digest "THIS IS A MESSAGE"', () => { |
| 35 | + const md = sha1.create() |
| 36 | + md.start() |
| 37 | + md.update('THIS IS ') |
| 38 | + md.update('A MESSAGE') |
| 39 | + // do twice to check continuing digest |
| 40 | + expect(md.digest().toHex()).toBe('5f24f4d6499fd2d44df6c6e94be8b14a796c071d') |
| 41 | + expect(md.digest().toHex()).toBe('5f24f4d6499fd2d44df6c6e94be8b14a796c071d') |
| 42 | + }) |
| 43 | + |
| 44 | + it('should digest a long message', () => { |
| 45 | + // Note: might be too slow on old browsers |
| 46 | + const md = sha1.create() |
| 47 | + md.update(fillString('a', 1000000)) |
| 48 | + expect(md.digest().toHex()).toBe('34aa973cd4c4daa4f61eeb2bdbad27316534016f') |
| 49 | + }) |
| 50 | + |
| 51 | + it('should digest multiple long messages', () => { |
| 52 | + // Note: might be too slow on old browsers |
| 53 | + // done multiple times to check hot loop optimizations |
| 54 | + for (let loop = 0; loop < 3; ++loop) { |
| 55 | + const md = sha1.create() |
| 56 | + for (let i = 0; i < 10000; ++i) { |
| 57 | + md.update('abc') |
| 58 | + } |
| 59 | + expect(md.digest().toHex()).toBe('a838edb5dec47b84b4bfb0a528ea958a5d9d2350') |
| 60 | + } |
| 61 | + }) |
| 62 | +}) |
0 commit comments