Skip to content

Commit adc5b15

Browse files
committed
test: epsilon rewrite rules
1 parent 708db56 commit adc5b15

File tree

1 file changed

+5
-8
lines changed

1 file changed

+5
-8
lines changed

test/regex.spec.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -207,11 +207,7 @@ describe('size', () => {
207207

208208
describe('rewrite rules', () => {
209209

210-
// TODO:
211-
// - test intersection/complement rules.
212-
// - test rules involving epsilon / empty set
213-
// (can't be tested right now because parser does not
214-
// support empty set `$.^` and epsilon `()`.
210+
// TODO: test intersection/complement rules.
215211

216212
const rewriteCases = [
217213
// concat rules:
@@ -225,8 +221,6 @@ describe('rewrite rules', () => {
225221
[/^a?a?$/, /^(a?){2}$/],
226222
[/^()a$/, /^a$/],
227223
[/^a()$/, /^a$/],
228-
// TODO:
229-
// [/^a($.^)$/, /$.^/],
230224
// union rules:
231225
[/^(a|a)$/, /^a$/],
232226
// expected expression:
@@ -245,12 +239,15 @@ describe('rewrite rules', () => {
245239
[/^(ba|a)$/, /^b?a$/],
246240
[/^(a|ab)$/, /^ab?$/],
247241
[/^(a|ba)$/, /^b?a$/],
242+
// union-of-star rules:
243+
[/^(a*|)$/, /^a*$/],
248244
// TODO:
249245
// [/^(a|a{2}|a{3}|a{4}|a{5})$/, /^(a{1,5})$/],
250246
// [/^(a|a{2}|a{3}|a{4}|a{5}|b)$/, /^(a{1,5}|b)$/],
251247
// star rules:
252248
[/^(a*)*$/, /^a*$/],
253249
[/^(a*b*)*$/, /^[ab]*$/],
250+
[/^()*$/, /^$/],
254251
] as const
255252

256253
for (const [source, target] of rewriteCases) {
@@ -275,7 +272,7 @@ describe('derivative', () => {
275272

276273
for (const [input, str, expected] of derivativeCases) {
277274
it(`of ${input} with respect to "${str}" is ${expected}`, () => {
278-
const actual = RE.derivative(str, AST.toExtRegex(parseRegExp(input)))
275+
const actual = RE.derivative(str, AST.toExtRegex(parseRegExp(input)))
279276
assert(RE.isStdRegex(actual))
280277
assert.deepEqual(RE.toRegExp(actual), expected)
281278
})

0 commit comments

Comments
 (0)