eBooru/test/unit/parse_value_test.rb
Earlopain a7ef80074d
[Cleanup] Resolve some easy ruby warnings
Mostly duplicate method warnings
2024-04-28 11:59:37 +02:00

65 lines
2.4 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 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