summaryrefslogtreecommitdiff
path: root/mac/.config/mpv/script-modules/utf8/test/charclass_compiletime.lua
blob: 05d762d15678b58a890b9d112551ba722c7371cc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
local utf8 = require "init"
utf8.config = {
  debug = nil,
--   debug = utf8:require("util").debug,
}
utf8:init()

local ctx = utf8:require("context.compiletime"):new()

local equals = require 'test.util'.equals
local assert = require 'test.util'.assert
local assert_equals = require 'test.util'.assert_equals
local parse = utf8.regex.compiletime.charclass.parse

assert_equals({parse("aabb", "a", 1, ctx)}, {{codes = {utf8.byte("a")}}, 1})
assert_equals({parse("aabb", "a", 2, ctx)}, {{codes = {utf8.byte("a")}}, 1})
assert_equals({parse("aabb", "b", 3, ctx)}, {{codes = {utf8.byte("b")}}, 1})
assert_equals({parse("aabb", "b", 4, ctx)}, {{codes = {utf8.byte("b")}}, 1})

assert_equals({parse("aa%ab", "%", 3, ctx)}, {{classes = {'alpha'}}, 2})
assert_equals({parse("aac%Ab", "%", 4, ctx)}, {{not_classes = {'alpha'}}, 2})
assert_equals({parse("aa.b", ".", 3, ctx)}, {{inverted = true}, 1})

assert_equals({parse("aa[c]b", "[", 3, ctx)}, {
  {codes = {utf8.byte("c")}, ranges = nil, classes = nil, not_classes = nil},
  utf8.raw.len("[c]")
})

assert_equals({parse("aa[%A]b", "[", 3, ctx)}, {
  {codes = nil, ranges = nil, classes = nil, not_classes = {'alpha'}},
  utf8.raw.len("[%A]")
})

assert_equals({parse("[^%p%d%s%c]+", "[", 1, ctx)}, {
  {codes = nil, ranges = nil, classes = {'punct', 'digit', 'space', 'cntrl'}, not_classes = nil, inverted = true},
  utf8.raw.len("[^%p%d%s%c]")
})

assert_equals({parse("aa[[c]]b", "[", 3, ctx)}, {
  {codes = {utf8.byte("["), utf8.byte("c")}, ranges = nil, classes = nil, not_classes = nil},
  utf8.raw.len("[[c]")
})

assert_equals({parse("aa[%a[c]]b", "[", 3, ctx)}, {
  {codes = {utf8.byte("["), utf8.byte("c")}, ranges = nil, classes = {'alpha'}, not_classes = nil},
  utf8.raw.len("[%a[c]")
})

assert_equals({parse("aac-db", "c", 3, ctx)}, {
  {codes = {utf8.byte("c")}},
  utf8.raw.len("c")
})

assert_equals({parse("aa[c-d]b", "[", 3, ctx)}, {
  {codes = nil, ranges = {{utf8.byte("c"),utf8.byte("d")}}, classes = nil, not_classes = nil},
  utf8.raw.len("[c-d]")
})
assert_equals(ctx.internal, false)

assert_equals({parse("aa[c-]]b", "[", 3, ctx)}, {
  {codes = {utf8.byte("-"), utf8.byte("c")}, ranges = nil, classes = nil, not_classes = nil},
  utf8.raw.len("[c-]")
})
assert_equals(ctx.internal, false)

assert_equals({parse("aad-", "d", 3, ctx)}, {
  {codes = {utf8.byte("d")}},
  utf8.raw.len("d")
})
assert_equals(ctx.internal, false)

ctx.internal = false
assert_equals({parse(".", ".", 1, ctx)}, {
  {inverted = true},
  utf8.raw.len(".")
})

assert_equals({parse("[.]", "[", 1, ctx)}, {
  {codes = {utf8.byte(".")}},
  utf8.raw.len("[.]")
})

assert_equals({parse("%?", "%", 1, ctx)}, {
  {codes = {utf8.byte("?")}},
  utf8.raw.len("%?")
})

assert_equals({parse("[]]", "[", 1, ctx)}, {
  {codes = {utf8.byte("]")}},
  utf8.raw.len("[]]")
})

assert_equals({parse("[^]]", "[", 1, ctx)}, {
  {codes = {utf8.byte("]")}, inverted = true},
  utf8.raw.len("[^]]")
})

--[[--
multibyte chars
--]]--

assert_equals({parse("ббюю", "б", #"" + 1, ctx)}, {{codes = {utf8.byte("б")}}, utf8.raw.len("б")})
assert_equals({parse("ббюю", "б", #"б" + 1, ctx)}, {{codes = {utf8.byte("б")}}, utf8.raw.len("б")})
assert_equals({parse("ббюю", "ю", #"бб" + 1, ctx)}, {{codes = {utf8.byte("ю")}}, utf8.raw.len("ю")})
assert_equals({parse("ббюю", "ю", #"ббю" + 1, ctx)}, {{codes = {utf8.byte("ю")}}, utf8.raw.len("ю")})

assert_equals({parse("бб%aю", "%", #"бб" + 1, ctx)}, {{classes = {'alpha'}}, 2})
assert_equals({parse("ббц%Aю", "%", #"ббц" + 1, ctx)}, {{not_classes = {'alpha'}}, 2})
assert_equals({parse("бб.ю", ".", #"бб" + 1, ctx)}, {{inverted = true}, 1})

assert_equals({parse("бб[ц]ю", "[", #"бб" + 1, ctx)}, {
  {codes = {utf8.byte("ц")}, ranges = nil, classes = nil, not_classes = nil},
  utf8.raw.len("[ц]")
})

assert_equals({parse("бб[%A]ю", "[", #"бб" + 1, ctx)}, {
  {codes = nil, ranges = nil, classes = nil, not_classes = {'alpha'}},
  utf8.raw.len("[%A]")
})

assert_equals({parse("бб[[ц]]ю", "[", #"бб" + 1, ctx)}, {
  {codes = {utf8.byte("["), utf8.byte("ц")}, ranges = nil, classes = nil, not_classes = nil},
  utf8.raw.len("[[ц]")
})

assert_equals({parse("бб[%a[ц]]ю", "[", #"бб" + 1, ctx)}, {
  {codes = {utf8.byte("["), utf8.byte("ц")}, ranges = nil, classes = {'alpha'}, not_classes = nil},
  utf8.raw.len("[%a[ц]")
})

ctx.internal = true
assert_equals({parse("ббц-ыю", "ц", #"бб" + 1, ctx)}, {
  {ranges = {{utf8.byte("ц"),utf8.byte("ы")}}},
  utf8.raw.len("ц-ы")
})

ctx.internal = false
assert_equals({parse("бб[ц-ы]ю", "[", #"бб" + 1, ctx)}, {
  {codes = nil, ranges = {{utf8.byte("ц"),utf8.byte("ы")}}, classes = nil, not_classes = nil},
  utf8.raw.len("[ц-ы]")
})

assert_equals({parse("бб[ц-]]ю", "[", #"бб" + 1, ctx)}, {
  {codes = {utf8.byte("-"), utf8.byte("ц")}, ranges = nil, classes = nil, not_classes = nil},
  utf8.raw.len("[ц-]")
})

assert_equals({parse("ббы-", "ы", #"бб" + 1, ctx)}, {
  {codes = {utf8.byte("ы")}},
  utf8.raw.len("ы")
})

ctx.internal = true
assert_equals({parse("ббы-цю", "ы", #"бб" + 1, ctx)}, {
  {ranges = {{utf8.byte("ы"),utf8.byte("ц")}}},
  utf8.raw.len("ы-ц")
})

ctx.internal = false
assert_equals({parse("бб[ы]ю", "[", #"бб" + 1, ctx)}, {
  {codes = {utf8.byte("ы")}, ranges = nil, classes = nil, not_classes = nil},
  utf8.raw.len("[ы]")
})

print "OK"