Files
2026-07-13 12:48:55 +08:00

66 lines
2.3 KiB
JavaScript

import test from 'tape'
import nlp from '../_lib.js'
const here = '[two/named-multi] '
test('two named matches', function (t) {
let m = nlp('the big dog played').match('the [<size>#Adjective] [<animal>#Noun] played')
t.equal(m.groups('size').text(), 'big', here + 'one-size')
t.equal(m.groups('animal').text(), 'dog', here + 'one-animal')
t.equal(m.groups('asdf').text(), '', here + 'one-blank')
let res = m.groups()
t.equal(res.size && res.size.text(), 'big', here + 'obj-size')
t.equal(res.animal && res.animal.text(), 'dog', here + 'obj-animal')
const doc = nlp.tokenize('june the 5th')
m = doc.match('[<month>june] the [<date>5th]')
t.equal(m.groups('month').text(), 'june', here + 'one-month')
t.equal(m.groups('date').text(), '5th', here + 'one-date')
res = m.groups()
t.equal(res.date && res.date.text(), '5th', here + 'obj-date')
t.equal(res.month && res.month.text(), 'june', here + 'obj-month')
t.end()
})
test('two named - two results', function (t) {
const doc = nlp('june the 5th and july the 7th')
const m = doc.match('[<month>#Month] the [<date>#Value]')
//by object
const res = m.groups()
t.equal(res.date.length, 2, here + '2-obj-results-date')
t.equal(res.month.length, 2, here + '2-obj-results-month')
t.equal(res.date.eq(0).text(), '5th', here + 'obj-date')
t.equal(res.month.eq(0).text(), 'june', here + 'obj-month')
const months = m.groups('month')
t.equal(months.length, 2, here + 'found two months')
const dates = m.groups('date')
t.equal(dates.length, 2, here + 'found two dates')
t.equal(months.eq(0).text(), 'june', here + 'one-month')
t.equal(dates.eq(0).text(), '5th', here + 'one-date')
t.equal(months.eq(1).text(), 'july', here + 'two-month')
t.equal(dates.eq(1).text(), '7th', here + 'two-date')
t.end()
})
test('one named - three results', function (t) {
const doc = nlp('june the 5th, july the 7th, and sept the 12th.')
const m = doc.match('[<month>#Month]')
//by object
t.equal(m.groups('month').length, 3, here + '3 months, one sentence')
t.end()
})
test('absolute pointers', function (t) {
const doc = nlp('i gave him two fourths of a slice')
let m = doc.match('#Value+')
m = m.match('#Value+')
m = m.match('[<num>two] [<dem>fourths]')
const { num, dem } = m.groups()
t.equal(num.text(), 'two', here + 'num')
t.equal(dem.text(), 'fourths', here + 'den')
t.end()
})