forked from e621ng/e621ng
71 lines
2.5 KiB
Ruby
71 lines
2.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "test_helper"
|
|
|
|
class ParseValueTest < ActiveSupport::TestCase
|
|
subject { ParseValue }
|
|
|
|
def eq_value(input, type)
|
|
subject.range(input, type)[1]
|
|
end
|
|
|
|
should "parse ranges" do
|
|
assert_equal([:eq, 10], subject.range("10"))
|
|
assert_equal([:lt, 10], subject.range("<10"))
|
|
assert_equal([:lte, 10], subject.range("<=10"))
|
|
assert_equal([:lte, 10], subject.range("..10"))
|
|
assert_equal([:gt, 10], subject.range(">10"))
|
|
assert_equal([:gte, 10], subject.range(">=10"))
|
|
assert_equal([:gte, 10], subject.range("10.."))
|
|
assert_equal([:between, 5, 15], subject.range("5..15"))
|
|
assert_equal([:in, [8, 9, 10, 11, 12]], subject.range("8,9,10,11,12"))
|
|
end
|
|
|
|
should "parse negative values" do
|
|
assert_equal([:lt, -1], subject.range("<-1"))
|
|
end
|
|
|
|
should "clamp huge values" do
|
|
assert_equal(ParseValue::MAX_INT, eq_value("1234567890987654321", :integer))
|
|
assert_equal(ParseValue::MIN_INT, eq_value("-1234567890987654321", :integer))
|
|
assert_equal(ParseValue::MAX_INT, eq_value("123456789098765432.1", :float))
|
|
assert_equal(ParseValue::MIN_INT, eq_value("-123456789098765432.1", :float))
|
|
end
|
|
|
|
should "parse floats" do
|
|
assert_equal(10.0, eq_value("10", :float))
|
|
assert_equal(0.1, eq_value(".1", :float))
|
|
assert_equal(1.234, eq_value("1.234", :float))
|
|
end
|
|
|
|
should "parse ratios" do
|
|
assert_equal(10.0, eq_value("10", :ratio))
|
|
assert_equal(0.63, eq_value("5:8", :ratio))
|
|
assert_equal(0.0, eq_value("10:0", :ratio))
|
|
end
|
|
|
|
should "parse floats" do
|
|
assert_equal(10.0, eq_value("10", :float))
|
|
assert_equal(0.1, eq_value(".1", :float))
|
|
assert_equal(1.234, eq_value("1.234", :float))
|
|
end
|
|
|
|
should "parse filesizes" do
|
|
assert_equal(10, eq_value("10", :filesize))
|
|
assert_equal(102, eq_value(".1kb", :filesize))
|
|
assert_equal(1024, eq_value("1KB", :filesize))
|
|
assert_equal(50 * 1024, eq_value("50KB", :filesize))
|
|
assert_equal(1.5 * 1024 * 1024, eq_value("1.5mb", :filesize))
|
|
end
|
|
|
|
should "invert ranges" do
|
|
assert_equal([:eq, 10], subject.invert_range(subject.range("10")))
|
|
assert_equal([:gt, 10], subject.invert_range(subject.range("<10")))
|
|
assert_equal([:gte, 10], subject.invert_range(subject.range("<=10")))
|
|
assert_equal([:lt, 10], subject.invert_range(subject.range(">10")))
|
|
assert_equal([:lte, 10], subject.invert_range(subject.range(">=10")))
|
|
assert_equal([:between, 15, 5], subject.invert_range(subject.range("5..15")))
|
|
assert_equal([:in, [8, 9, 10, 11, 12]], subject.invert_range(subject.range("8,9,10,11,12")))
|
|
end
|
|
end
|