#!/usr/bin/env ruby require 'rubygems' require 'bundler/setup' $:.unshift(File.dirname(__FILE__)) require 'TestSetup' require 'RandomThings' class PgBitTest < Test include SqlPostgres include RandomThings def test_ctor_defaults assertEquals(PgBit.new.bits, []) end def test_ctor_and_accessors bits = (0..4).collect do rand(2) end assertEquals(PgBit.new(bits).bits, bits) assertEquals(PgBit.new(bits.join.to_s).bits, bits) end def test_from_sql testCases = [ ["", []], ["0", [0]], ["101", [1, 0, 1]], ] for testCase in testCases sql, bits = *testCase assertInfo("For sql #{sql.inspect}") do assertEquals(PgBit.from_sql(sql), PgBit.new(bits)) end end assertException(ArgumentError, 'Invalid bit: "foo"') do PgBit.from_sql("foo") end end def test_equality fields = ["bits"] for field in fields assertInfo("For field #{field}") do bit1 = PgBit.new bit2 = PgBit.new assertEquals(bit1.eql?(bit2), true) assertEquals(bit1 == bit2, true) assertEquals(bit1 != bit2, false) args = fields.collect do |f| if f == field then 1 else 0 end end bit2 = PgBit.new(*args) assertEquals(bit1 == bit2, false) assertEquals(bit1 != bit2, true) assertEquals(bit1.eql?(Object.new), false) assertEquals(bit1 == Object.new, false) end end end def test_hash count = 0 hashes = Hash.new(0) testHash = proc { |*args| assertEquals(PgBit.new(*args).hash, PgBit.new(*args).hash) hashes[PgBit.new(*args).hash] += 1 count += 1 } for i in (0...10) testHash.call(i) end assertGreaterOrEqual(hashes.size.to_f / count, 0.5) end def test_to_s testCases = [ [[], ""], [[1], "1"], [[1, 0, 1], "101"], ] for testCase in testCases bits, expected = *testCase bit = PgBit.new(bits) assertEquals(bit.to_s, expected) assertEquals(bit.to_sql, "bit '#{expected}'") end end end PgBitTest.new.run if $0 == __FILE__ # Local Variables: # tab-width: 2 # ruby-indent-level: 2 # indent-tabs-mode: nil # End: