note
	description: "Summary description for {SHA1_TEST}."
	author: "Colin LeMahieu"
	date: "$Date: 2011-11-11 18:13:16 +0100 (ven., 11 nov. 2011) $"
	revision: "$Revision: 87787 $"
	quote: "We must have government, but we must watch them like a hawk. - Millicent Fenwick (1983)"

class
	SHA1_TEST

inherit
	EQA_TEST_SET

feature
	test_long
		local
			sha1: SHA1
			output: SPECIAL [NATURAL_8]
			solution: SPECIAL [NATURAL_8]
			correct: BOOLEAN
			i: INTEGER
		do
			create sha1.make
			create output.make_filled (0, 20)
			create solution.make_filled (0, 20)
			solution [0] := 0x34
			solution [1] := 0xaa
			solution [2] := 0x97
			solution [3] := 0x3c
			solution [4] := 0xd4
			solution [5] := 0xc4
			solution [6] := 0xda
			solution [7] := 0xa4
			solution [8] := 0xf6
			solution [9] := 0x1e
			solution [10] := 0xeb
			solution [11] := 0x2b
			solution [12] := 0xdb
			solution [13] := 0xad
			solution [14] := 0x27
			solution [15] := 0x31
			solution [16] := 0x65
			solution [17] := 0x34
			solution [18] := 0x01
			solution [19] := 0x6f
			from
				i := 1
			until
				i > 1_000_000
			loop
				sha1.sink_character ('a')
				i := i + 1
			variant
				1_000_000 - i + 1
			end
			sha1.do_final (output, 0)
			correct := solution.same_items (output, 0, 0, 20)
			assert ("test long", correct)
		end

	test_multi
		local
			sha1: SHA1
			output: SPECIAL [NATURAL_8]
			solution: SPECIAL [NATURAL_8]
			correct: BOOLEAN
		do
			create sha1.make
			create output.make_filled (0, 20)
			create solution.make_filled (0, 20)
			solution [0] := 0x84
			solution [1] := 0x98
			solution [2] := 0x3e
			solution [3] := 0x44
			solution [4] := 0x1c
			solution [5] := 0x3b
			solution [6] := 0xd2
			solution [7] := 0x6e
			solution [8] := 0xba
			solution [9] := 0xae
			solution [10] := 0x4a
			solution [11] := 0xa1
			solution [12] := 0xf9
			solution [13] := 0x51
			solution [14] := 0x29
			solution [15] := 0xe5
			solution [16] := 0xe5
			solution [17] := 0x46
			solution [18] := 0x70
			solution [19] := 0xf1
			sha1.sink_string ("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq")
			sha1.do_final (output, 0)
			correct := solution.same_items (output, 0, 0, 20)
			assert ("test multi", correct)
		end

	test_abc
		local
			sha1: SHA1
			output: SPECIAL [NATURAL_8]
			solution: SPECIAL [NATURAL_8]
			correct: BOOLEAN
		do
			create sha1.make
			create output.make_filled (0, 20)
			create solution.make_filled (0, 20)
			solution [0] := 0xa9
			solution [1] := 0x99
			solution [2] := 0x3e
			solution [3] := 0x36
			solution [4] := 0x47
			solution [5] := 0x06
			solution [6] := 0x81
			solution [7] := 0x6a
			solution [8] := 0xba
			solution [9] := 0x3e
			solution [10] := 0x25
			solution [11] := 0x71
			solution [12] := 0x78
			solution [13] := 0x50
			solution [14] := 0xc2
			solution [15] := 0x6c
			solution [16] := 0x9c
			solution [17] := 0xd0
			solution [18] := 0xd8
			solution [19] := 0x9d
			sha1.update (('a').code.to_natural_8)
			sha1.update (('b').code.to_natural_8)
			sha1.update (('c').code.to_natural_8)
			sha1.do_final (output, 0)
			correct := solution.same_items (output, 0, 0, 20)
			assert ("test abc", correct)
		end

	test_empty
		local
			sha1: SHA1
			output: SPECIAL [NATURAL_8]
			solution: SPECIAL [NATURAL_8]
			correct: BOOLEAN
		do
			create sha1.make
			create output.make_filled (0, 20)
			create solution.make_filled (0, 20)
			solution [0] := 0xda
			solution [1] := 0x39
			solution [2] := 0xa3
			solution [3] := 0xee
			solution [4] := 0x5e
			solution [5] := 0x6b
			solution [6] := 0x4b
			solution [7] := 0x0d
			solution [8] := 0x32
			solution [9] := 0x55
			solution [10] := 0xbf
			solution [11] := 0xef
			solution [12] := 0x95
			solution [13] := 0x60
			solution [14] := 0x18
			solution [15] := 0x90
			solution [16] := 0xaf
			solution [17] := 0xd8
			solution [18] := 0x07
			solution [19] := 0x09
			sha1.do_final (output, 0)
			correct := solution.same_items (output, 0, 0, 20)
			assert ("test empty", correct)
		end
end
