130 lines
3.5 KiB
Ruby
130 lines
3.5 KiB
Ruby
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
require 'test/unit'
|
||
|
require 'glib2'
|
||
|
|
||
|
class TestFlags < Test::Unit::TestCase
|
||
|
{
|
||
|
'<=>' => [
|
||
|
[0b0000, 0.0, nil],
|
||
|
[0b0000, 0b0000, 0],
|
||
|
[0b0000, 0b0110, -1],
|
||
|
[0b0000, 0b1111, -1],
|
||
|
[0b0110, 0b0000, 1],
|
||
|
[0b0110, 0b0011, nil],
|
||
|
[0b0110, 0b0110, 0],
|
||
|
[0b0110, 0b0111, -1],
|
||
|
[0b0110, 0b1001, nil],
|
||
|
[0b0110, 0b1100, nil],
|
||
|
[0b0110, 0b1110, -1],
|
||
|
[0b0110, 0b1111, -1],
|
||
|
[0b1111, 0b0000, 1],
|
||
|
[0b1111, 0b0110, 1],
|
||
|
[0b1111, 0b1111, 0],
|
||
|
],
|
||
|
'==' => [
|
||
|
[0b0000, 0.0, nil],
|
||
|
[0b0000, 0b0000, true],
|
||
|
[0b0000, 0b0110, false],
|
||
|
[0b0000, 0b1111, false],
|
||
|
[0b0110, 0b0000, false],
|
||
|
[0b0110, 0b0011, false],
|
||
|
[0b0110, 0b0110, true],
|
||
|
[0b0110, 0b0111, false],
|
||
|
[0b0110, 0b1001, false],
|
||
|
[0b0110, 0b1100, false],
|
||
|
[0b0110, 0b1110, false],
|
||
|
[0b0110, 0b1111, false],
|
||
|
[0b1111, 0b0000, false],
|
||
|
[0b1111, 0b0110, false],
|
||
|
[0b1111, 0b1111, true],
|
||
|
],
|
||
|
'>=' => [
|
||
|
[0b0000, 0.0, nil],
|
||
|
[0b0000, 0b0000, true],
|
||
|
[0b0000, 0b0110, false],
|
||
|
[0b0000, 0b1111, false],
|
||
|
[0b0110, 0b0000, true],
|
||
|
[0b0110, 0b0011, false],
|
||
|
[0b0110, 0b0110, true],
|
||
|
[0b0110, 0b0111, false],
|
||
|
[0b0110, 0b1001, false],
|
||
|
[0b0110, 0b1100, false],
|
||
|
[0b0110, 0b1110, false],
|
||
|
[0b0110, 0b1111, false],
|
||
|
[0b1111, 0b0000, true],
|
||
|
[0b1111, 0b0110, true],
|
||
|
[0b1111, 0b1111, true],
|
||
|
],
|
||
|
'<=' => [
|
||
|
[0b0000, 0.0, nil],
|
||
|
[0b0000, 0b0000, true],
|
||
|
[0b0000, 0b0110, true],
|
||
|
[0b0000, 0b1111, true],
|
||
|
[0b0110, 0b0000, false],
|
||
|
[0b0110, 0b0011, false],
|
||
|
[0b0110, 0b0110, true],
|
||
|
[0b0110, 0b0111, true],
|
||
|
[0b0110, 0b1001, false],
|
||
|
[0b0110, 0b1100, false],
|
||
|
[0b0110, 0b1110, true],
|
||
|
[0b0110, 0b1111, true],
|
||
|
[0b1111, 0b0000, false],
|
||
|
[0b1111, 0b0110, false],
|
||
|
[0b1111, 0b1111, true],
|
||
|
],
|
||
|
'>' => [
|
||
|
[0b0000, 0.0, nil],
|
||
|
[0b0000, 0b0000, false],
|
||
|
[0b0000, 0b0110, false],
|
||
|
[0b0000, 0b1111, false],
|
||
|
[0b0110, 0b0000, true],
|
||
|
[0b0110, 0b0011, false],
|
||
|
[0b0110, 0b0110, false],
|
||
|
[0b0110, 0b0111, false],
|
||
|
[0b0110, 0b1001, false],
|
||
|
[0b0110, 0b1100, false],
|
||
|
[0b0110, 0b1110, false],
|
||
|
[0b0110, 0b1111, false],
|
||
|
[0b1111, 0b0000, true],
|
||
|
[0b1111, 0b0110, true],
|
||
|
[0b1111, 0b1111, false],
|
||
|
],
|
||
|
'<' => [
|
||
|
[0b0000, 0.0, nil],
|
||
|
[0b0000, 0b0000, false],
|
||
|
[0b0000, 0b0110, true],
|
||
|
[0b0000, 0b1111, true],
|
||
|
[0b0110, 0b0000, false],
|
||
|
[0b0110, 0b0011, false],
|
||
|
[0b0110, 0b0110, false],
|
||
|
[0b0110, 0b0111, true],
|
||
|
[0b0110, 0b1001, false],
|
||
|
[0b0110, 0b1100, false],
|
||
|
[0b0110, 0b1110, true],
|
||
|
[0b0110, 0b1111, true],
|
||
|
[0b1111, 0b0000, false],
|
||
|
[0b1111, 0b0110, false],
|
||
|
[0b1111, 0b1111, false],
|
||
|
],
|
||
|
}.each do |operator, values|
|
||
|
values.each do |a, b, expected|
|
||
|
a_format = a.is_a?(Float) ? "%f" : "0b%04b"
|
||
|
b_format = b.is_a?(Float) ? "%f" : "0b%04b"
|
||
|
label_format = "#{a_format} %s #{b_format} == %s"
|
||
|
data((label_format % [a, operator, b, expected.inspect]),
|
||
|
{
|
||
|
:a => a,
|
||
|
:operator => operator,
|
||
|
:b => b,
|
||
|
:expected => expected,
|
||
|
})
|
||
|
end
|
||
|
end
|
||
|
def test_flags_compare(data)
|
||
|
flags = GLib::KeyFile::Flags.new(data[:a])
|
||
|
assert_equal(data[:expected],
|
||
|
flags.send(data[:operator], data[:b]))
|
||
|
end
|
||
|
end
|