UNPKG

fast-check

Version:

Property based testing framework for JavaScript (like QuickCheck)

42 lines (41 loc) 1.82 kB
import { mapToConstant } from '../mapToConstant.js'; import { asciiAlphabetRanges, autonomousDecomposableGraphemeRanges, autonomousGraphemeRanges, fullAlphabetRanges, } from './data/GraphemeRanges.js'; import { convertGraphemeRangeToMapToConstantEntry, intersectGraphemeRanges } from './helpers/GraphemeRangesHelpers.js'; const registeredStringUnitInstancesMap = Object.create(null); function getAlphabetRanges(alphabet) { switch (alphabet) { case 'full': return fullAlphabetRanges; case 'ascii': return asciiAlphabetRanges; } } function getOrCreateStringUnitInstance(type, alphabet) { const key = `${type}:${alphabet}`; const registered = registeredStringUnitInstancesMap[key]; if (registered !== undefined) { return registered; } const alphabetRanges = getAlphabetRanges(alphabet); const ranges = type === 'binary' ? alphabetRanges : intersectGraphemeRanges(alphabetRanges, autonomousGraphemeRanges); const entries = []; for (const range of ranges) { entries.push(convertGraphemeRangeToMapToConstantEntry(range)); } if (type === 'grapheme') { const decomposedRanges = intersectGraphemeRanges(alphabetRanges, autonomousDecomposableGraphemeRanges); for (const range of decomposedRanges) { const rawEntry = convertGraphemeRangeToMapToConstantEntry(range); entries.push({ num: rawEntry.num, build: (idInGroup) => rawEntry.build(idInGroup).normalize('NFD'), }); } } const stringUnitInstance = mapToConstant(...entries); registeredStringUnitInstancesMap[key] = stringUnitInstance; return stringUnitInstance; } export function stringUnit(type, alphabet) { return getOrCreateStringUnitInstance(type, alphabet); }