88 lines
3.8 KiB
Ruby
88 lines
3.8 KiB
Ruby
module Imbecile
|
|
describe CodePointRange do
|
|
|
|
describe "#<=>" do
|
|
it "sorts ranges" do
|
|
arr = [
|
|
CodePointRange.new(100,102),
|
|
CodePointRange.new(65, 68),
|
|
CodePointRange.new(65, 65),
|
|
CodePointRange.new(100, 100),
|
|
CodePointRange.new(68, 70),
|
|
]
|
|
arr.sort!
|
|
expect(arr[0]).to eq CodePointRange.new(65, 65)
|
|
expect(arr[1]).to eq CodePointRange.new(65, 68)
|
|
expect(arr[2]).to eq CodePointRange.new(68, 70)
|
|
expect(arr[3]).to eq CodePointRange.new(100, 100)
|
|
expect(arr[4]).to eq CodePointRange.new(100, 102)
|
|
end
|
|
end
|
|
|
|
describe "#include?" do
|
|
it "returns whether the code point is included in the range" do
|
|
expect(CodePointRange.new(100).include?(100)).to be_truthy
|
|
expect(CodePointRange.new(100, 100).include?(99)).to be_falsey
|
|
expect(CodePointRange.new(100, 100).include?(101)).to be_falsey
|
|
expect(CodePointRange.new(100, 120).include?(99)).to be_falsey
|
|
expect(CodePointRange.new(100, 120).include?(100)).to be_truthy
|
|
expect(CodePointRange.new(100, 120).include?(110)).to be_truthy
|
|
expect(CodePointRange.new(100, 120).include?(120)).to be_truthy
|
|
expect(CodePointRange.new(100, 120).include?(121)).to be_falsey
|
|
end
|
|
|
|
it "returns whether the range is included in the range" do
|
|
expect(CodePointRange.new(100).include?(CodePointRange.new(100))).to be_truthy
|
|
expect(CodePointRange.new(100, 100).include?(CodePointRange.new(99))).to be_falsey
|
|
expect(CodePointRange.new(100, 100).include?(CodePointRange.new(99, 100))).to be_falsey
|
|
expect(CodePointRange.new(100, 120).include?(CodePointRange.new(90, 110))).to be_falsey
|
|
expect(CodePointRange.new(100, 120).include?(CodePointRange.new(110, 130))).to be_falsey
|
|
expect(CodePointRange.new(100, 120).include?(CodePointRange.new(100, 120))).to be_truthy
|
|
expect(CodePointRange.new(100, 120).include?(CodePointRange.new(100, 110))).to be_truthy
|
|
expect(CodePointRange.new(100, 120).include?(CodePointRange.new(110, 120))).to be_truthy
|
|
expect(CodePointRange.new(100, 120).include?(CodePointRange.new(102, 118))).to be_truthy
|
|
end
|
|
end
|
|
|
|
describe ".invert_ranges" do
|
|
it "inverts ranges" do
|
|
expect(CodePointRange.invert_ranges(
|
|
[CodePointRange.new(60, 90),
|
|
CodePointRange.new(80, 85),
|
|
CodePointRange.new(80, 100),
|
|
CodePointRange.new(101),
|
|
CodePointRange.new(200, 300)])).to eq [
|
|
CodePointRange.new(0, 59),
|
|
CodePointRange.new(102, 199),
|
|
CodePointRange.new(301, 0xFFFFFFFF)]
|
|
expect(CodePointRange.invert_ranges(
|
|
[CodePointRange.new(0, 500),
|
|
CodePointRange.new(7000, 0xFFFFFFFF)])).to eq [
|
|
CodePointRange.new(501, 6999)]
|
|
end
|
|
end
|
|
|
|
describe ".first_subrange" do
|
|
it "returns the first subrange to split" do
|
|
expect(CodePointRange.first_subrange(
|
|
[CodePointRange.new(65, 90),
|
|
CodePointRange.new(66, 66),
|
|
CodePointRange.new(80, 90)])).to eq CodePointRange.new(65)
|
|
expect(CodePointRange.first_subrange(
|
|
[CodePointRange.new(65, 90)])).to eq CodePointRange.new(65, 90)
|
|
expect(CodePointRange.first_subrange(
|
|
[CodePointRange.new(65, 90),
|
|
CodePointRange.new(80, 90)])).to eq CodePointRange.new(65, 79)
|
|
expect(CodePointRange.first_subrange(
|
|
[CodePointRange.new(65, 90),
|
|
CodePointRange.new(65, 100),
|
|
CodePointRange.new(65, 95)])).to eq CodePointRange.new(65, 90)
|
|
expect(CodePointRange.first_subrange(
|
|
[CodePointRange.new(100, 120),
|
|
CodePointRange.new(70, 90)])).to eq CodePointRange.new(70, 90)
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|