| 
									
										
										
										
											2014-11-02 23:33:06 +01:00
										 |  |  | package rle | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"bytes" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/ethereum/go-ethereum/crypto" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestDecompressSimple(t *testing.T) { | 
					
						
							|  |  |  | 	res, err := Decompress([]byte{token, 0xfd}) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Error(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if bytes.Compare(res, crypto.Sha3([]byte(""))) != 0 { | 
					
						
							|  |  |  | 		t.Error("empty sha3", res) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	res, err = Decompress([]byte{token, 0xfe}) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Error(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if bytes.Compare(res, crypto.Sha3([]byte{0x80})) != 0 { | 
					
						
							|  |  |  | 		t.Error("0x80 sha3", res) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	res, err = Decompress([]byte{token, 0xff}) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Error(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if bytes.Compare(res, []byte{token}) != 0 { | 
					
						
							|  |  |  | 		t.Error("token", res) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	res, err = Decompress([]byte{token, 12}) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Error(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if bytes.Compare(res, make([]byte, 10)) != 0 { | 
					
						
							|  |  |  | 		t.Error("10 * zero", res) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestDecompressMulti(t *testing.T) { | 
					
						
							|  |  |  | 	res, err := Decompress([]byte{token, 0xfd, token, 0xfe, token, 12}) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Error(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var exp []byte | 
					
						
							|  |  |  | 	exp = append(exp, crypto.Sha3([]byte(""))...) | 
					
						
							|  |  |  | 	exp = append(exp, crypto.Sha3([]byte{0x80})...) | 
					
						
							|  |  |  | 	exp = append(exp, make([]byte, 10)...) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if bytes.Compare(res, res) != 0 { | 
					
						
							|  |  |  | 		t.Error("Expected", exp, "result", res) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestCompressSimple(t *testing.T) { | 
					
						
							|  |  |  | 	res := Compress([]byte{0, 0, 0, 0, 0}) | 
					
						
							|  |  |  | 	if bytes.Compare(res, []byte{token, 7}) != 0 { | 
					
						
							|  |  |  | 		t.Error("5 * zero", res) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	res = Compress(crypto.Sha3([]byte(""))) | 
					
						
							|  |  |  | 	if bytes.Compare(res, []byte{token, emptyShaToken}) != 0 { | 
					
						
							|  |  |  | 		t.Error("empty sha", res) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	res = Compress(crypto.Sha3([]byte{0x80})) | 
					
						
							|  |  |  | 	if bytes.Compare(res, []byte{token, emptyListShaToken}) != 0 { | 
					
						
							|  |  |  | 		t.Error("empty list sha", res) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	res = Compress([]byte{token}) | 
					
						
							|  |  |  | 	if bytes.Compare(res, []byte{token, tokenToken}) != 0 { | 
					
						
							|  |  |  | 		t.Error("token", res) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestCompressMulti(t *testing.T) { | 
					
						
							|  |  |  | 	in := []byte{0, 0, 0, 0, 0} | 
					
						
							|  |  |  | 	in = append(in, crypto.Sha3([]byte(""))...) | 
					
						
							|  |  |  | 	in = append(in, crypto.Sha3([]byte{0x80})...) | 
					
						
							|  |  |  | 	in = append(in, token) | 
					
						
							|  |  |  | 	res := Compress(in) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	exp := []byte{token, 7, token, emptyShaToken, token, emptyListShaToken, token, tokenToken} | 
					
						
							|  |  |  | 	if bytes.Compare(res, exp) != 0 { | 
					
						
							|  |  |  | 		t.Error("expected", exp, "got", res) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2014-11-03 00:29:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | func TestCompressDecompress(t *testing.T) { | 
					
						
							|  |  |  | 	var in []byte | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for i := 0; i < 20; i++ { | 
					
						
							|  |  |  | 		in = append(in, []byte{0, 0, 0, 0, 0}...) | 
					
						
							|  |  |  | 		in = append(in, crypto.Sha3([]byte(""))...) | 
					
						
							|  |  |  | 		in = append(in, crypto.Sha3([]byte{0x80})...) | 
					
						
							|  |  |  | 		in = append(in, []byte{123, 2, 19, 89, 245, 254, 255, token, 98, 233}...) | 
					
						
							|  |  |  | 		in = append(in, token) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	c := Compress(in) | 
					
						
							|  |  |  | 	d, err := Decompress(c) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Error(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if bytes.Compare(d, in) != 0 { | 
					
						
							|  |  |  | 		t.Error("multi failed\n", d, "\n", in) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |