```On 7/1/06, John Baylor <john.baylor / gmail.com> wrote:
> Given the number of edge conditions for this quiz it seemed like a good
> place for a test harness.  Here is the irb session in the quiz translated to
> a test harness.  It is my first use of the test framework so hopefully I
> haven't made any horrible errors.

Good idea, here are the tests i'm using. It also includes the irb
session as well as a number of other tests.
It assumes the result of any calculation with FWI's and integers is a FWI.
I'm using a different syntax for the FWI's, but it should be easy
enough to convert this to whatever you're using.

Gmail will probably mess up my indent again, so here's a rafb link as well:
http://rafb.net/paste/results/rwO1Kf64.html

class FWITest < Test::Unit::TestCase
def test_unsigned_8
uint8 = UnsignedFWI(8)
n=uint8.new(0xFF)
assert_equal(255 , n)
n += 2
assert_equal(1 , n)
n = n << 1
assert_equal(2 , n)
n = n >> 1
assert_equal(1 , n)
assert_equal(254 , ~n)
n += 12
assert_equal(13 , n)
n = n & 0x0E
assert_equal(12 , n)
n -= 13
assert_equal(255 , n)
end

def test_signed_8
int8 = SignedFWI(8)
n = int8.new(1)
assert_equal(n,1)
n = n << 7
assert_equal(-128 , n)
n -= 1
assert_equal(127 , n)
n = n >> 6
assert_equal(1 , n)
n -= 2
assert_equal(-1 , n)
n = n ^ 0xF3
assert_equal(12 , n)
n = n | 0x01
assert_equal(13 , n)
end

def test_too_wide
uint8 = UnsignedFWI(8)
assert_equal(238, uint8.new(0) + 0xFFEE)
end

def test_short_length_unsigned
uint3 = UnsignedFWI(3)
uint10 = UnsignedFWI(10)
n = uint3.new(8)
assert_equal(0, n)
n -= 7
assert_equal(1, n)
assert_equal(0, n**23 + 7)
m = uint3.new(8)
assert_equal(1, n + m)
assert_equal(1, m + n)
assert_equal(1, 8 + n)
l = uint10.new(11)
assert_equal(1100-1024, l*100)
assert_equal(1100-1024, 100*l)
end

def test_short_length_signed
int3 = SignedFWI(3)
n = int3.new(4)
assert_equal(-4, n)
assert_equal(3 , (+n)-1)
assert_equal(n , 8+n)
assert_equal(-n, n)
n -= 1
assert_equal(3 , n)
end

def test_long_length_signed
int76 = SignedFWI(76)
n = int76.new( 1<<75 )
assert_equal(-(1<<75) , n)
n -= 1
assert_equal((1<<75)-1 , n)
n = int76.new(2)
n *= (1<<75)-1
assert_equal(-2 , n)
end

def test_power
uint3 = UnsignedFWI(3)
assert_equal(2, 2 ** uint3.new(1))
assert_equal(0, 2 ** uint3.new(3))
assert_equal(0, 2 ** uint3.new(67))
assert_equal(1, 3 ** uint3.new(2))
assert_equal(3, uint3.new(3) ** uint3.new(-1)) # 3**7 mod 8
end
end

```