diff options
Diffstat (limited to 'src/pkg/encoding/ascii85')
| -rw-r--r-- | src/pkg/encoding/ascii85/ascii85.go | 190 | ||||
| -rw-r--r-- | src/pkg/encoding/ascii85/ascii85_test.go | 140 | 
2 files changed, 165 insertions, 165 deletions
| diff --git a/src/pkg/encoding/ascii85/ascii85.go b/src/pkg/encoding/ascii85/ascii85.go index ac446baf8..67d6ef7ed 100644 --- a/src/pkg/encoding/ascii85/ascii85.go +++ b/src/pkg/encoding/ascii85/ascii85.go @@ -7,9 +7,9 @@  package ascii85  import ( -	"io"; -	"os"; -	"strconv"; +	"io" +	"os" +	"strconv"  )  /* @@ -30,74 +30,74 @@ func Encode(dst, src []byte) int {  		return 0  	} -	n := 0; +	n := 0  	for len(src) > 0 { -		dst[0] = 0; -		dst[1] = 0; -		dst[2] = 0; -		dst[3] = 0; -		dst[4] = 0; +		dst[0] = 0 +		dst[1] = 0 +		dst[2] = 0 +		dst[3] = 0 +		dst[4] = 0  		// Unpack 4 bytes into uint32 to repack into base 85 5-byte. -		var v uint32; +		var v uint32  		switch len(src) {  		default: -			v |= uint32(src[3]); -			fallthrough; +			v |= uint32(src[3]) +			fallthrough  		case 3: -			v |= uint32(src[2]) << 8; -			fallthrough; +			v |= uint32(src[2]) << 8 +			fallthrough  		case 2: -			v |= uint32(src[1]) << 16; -			fallthrough; +			v |= uint32(src[1]) << 16 +			fallthrough  		case 1:  			v |= uint32(src[0]) << 24  		}  		// Special case: zero (!!!!!) shortens to z.  		if v == 0 && len(src) >= 4 { -			dst[0] = 'z'; -			dst = dst[1:]; -			n++; -			continue; +			dst[0] = 'z' +			dst = dst[1:] +			n++ +			continue  		}  		// Otherwise, 5 base 85 digits starting at !.  		for i := 4; i >= 0; i-- { -			dst[i] = '!' + byte(v%85); -			v /= 85; +			dst[i] = '!' + byte(v%85) +			v /= 85  		}  		// If src was short, discard the low destination bytes. -		m := 5; +		m := 5  		if len(src) < 4 { -			m -= 4 - len(src); -			src = nil; +			m -= 4 - len(src) +			src = nil  		} else {  			src = src[4:]  		} -		dst = dst[m:]; -		n += m; +		dst = dst[m:] +		n += m  	} -	return n; +	return n  }  // MaxEncodedLen returns the maximum length of an encoding of n source bytes. -func MaxEncodedLen(n int) int	{ return (n + 3) / 4 * 5 } +func MaxEncodedLen(n int) int { return (n + 3) / 4 * 5 }  // NewEncoder returns a new ascii85 stream encoder.  Data written to  // the returned writer will be encoded and then written to w.  // Ascii85 encodings operate in 32-bit blocks; when finished  // writing, the caller must Close the returned encoder to flush any  // trailing partial block. -func NewEncoder(w io.Writer) io.WriteCloser	{ return &encoder{w: w} } +func NewEncoder(w io.Writer) io.WriteCloser { return &encoder{w: w} }  type encoder struct { -	err	os.Error; -	w	io.Writer; -	buf	[4]byte;	// buffered data waiting to be encoded -	nbuf	int;		// number of bytes in buf -	out	[1024]byte;	// output buffer +	err  os.Error +	w    io.Writer +	buf  [4]byte    // buffered data waiting to be encoded +	nbuf int        // number of bytes in buf +	out  [1024]byte // output buffer  }  func (e *encoder) Write(p []byte) (n int, err os.Error) { @@ -107,47 +107,47 @@ func (e *encoder) Write(p []byte) (n int, err os.Error) {  	// Leading fringe.  	if e.nbuf > 0 { -		var i int; +		var i int  		for i = 0; i < len(p) && e.nbuf < 4; i++ { -			e.buf[e.nbuf] = p[i]; -			e.nbuf++; +			e.buf[e.nbuf] = p[i] +			e.nbuf++  		} -		n += i; -		p = p[i:]; +		n += i +		p = p[i:]  		if e.nbuf < 4 {  			return  		} -		nout := Encode(&e.out, &e.buf); +		nout := Encode(&e.out, &e.buf)  		if _, e.err = e.w.Write(e.out[0:nout]); e.err != nil {  			return n, e.err  		} -		e.nbuf = 0; +		e.nbuf = 0  	}  	// Large interior chunks.  	for len(p) >= 4 { -		nn := len(e.out) / 5 * 4; +		nn := len(e.out) / 5 * 4  		if nn > len(p) {  			nn = len(p)  		} -		nn -= nn % 4; +		nn -= nn % 4  		if nn > 0 { -			nout := Encode(&e.out, p[0:nn]); +			nout := Encode(&e.out, p[0:nn])  			if _, e.err = e.w.Write(e.out[0:nout]); e.err != nil {  				return n, e.err  			}  		} -		n += nn; -		p = p[nn:]; +		n += nn +		p = p[nn:]  	}  	// Trailing fringe.  	for i := 0; i < len(p); i++ {  		e.buf[i] = p[i]  	} -	e.nbuf = len(p); -	n += len(p); -	return; +	e.nbuf = len(p) +	n += len(p) +	return  }  // Close flushes any pending output from the encoder. @@ -155,11 +155,11 @@ func (e *encoder) Write(p []byte) (n int, err os.Error) {  func (e *encoder) Close() os.Error {  	// If there's anything left in the buffer, flush it out  	if e.err == nil && e.nbuf > 0 { -		nout := Encode(&e.out, e.buf[0:e.nbuf]); -		e.nbuf = 0; -		_, e.err = e.w.Write(e.out[0:nout]); +		nout := Encode(&e.out, e.buf[0:e.nbuf]) +		e.nbuf = 0 +		_, e.err = e.w.Write(e.out[0:nout])  	} -	return e.err; +	return e.err  }  /* @@ -187,8 +187,8 @@ func (e CorruptInputError) String() string {  // NewDecoder wraps an io.Reader interface around Decode.  //  func Decode(dst, src []byte, flush bool) (ndst, nsrc int, err os.Error) { -	var v uint32; -	var nb int; +	var v uint32 +	var nb int  	for i, b := range src {  		if len(dst)-ndst < 4 {  			return @@ -197,27 +197,27 @@ func Decode(dst, src []byte, flush bool) (ndst, nsrc int, err os.Error) {  		case b <= ' ':  			continue  		case b == 'z' && nb == 0: -			nb = 5; -			v = 0; +			nb = 5 +			v = 0  		case '!' <= b && b <= 'u': -			v = v*85 + uint32(b-'!'); -			nb++; +			v = v*85 + uint32(b-'!') +			nb++  		default:  			return 0, 0, CorruptInputError(i)  		}  		if nb == 5 { -			nsrc = i + 1; -			dst[ndst] = byte(v >> 24); -			dst[ndst+1] = byte(v >> 16); -			dst[ndst+2] = byte(v >> 8); -			dst[ndst+3] = byte(v); -			ndst += 4; -			nb = 0; -			v = 0; +			nsrc = i + 1 +			dst[ndst] = byte(v >> 24) +			dst[ndst+1] = byte(v >> 16) +			dst[ndst+2] = byte(v >> 8) +			dst[ndst+3] = byte(v) +			ndst += 4 +			nb = 0 +			v = 0  		}  	}  	if flush { -		nsrc = len(src); +		nsrc = len(src)  		if nb > 0 {  			// The number of output bytes in the last fragment  			// is the number of leftover input bytes - 1: @@ -233,27 +233,27 @@ func Decode(dst, src []byte, flush bool) (ndst, nsrc int, err os.Error) {  				v = v*85 + 84  			}  			for i := 0; i < nb-1; i++ { -				dst[ndst] = byte(v >> 24); -				v <<= 8; -				ndst++; +				dst[ndst] = byte(v >> 24) +				v <<= 8 +				ndst++  			}  		}  	} -	return; +	return  }  // NewDecoder constructs a new ascii85 stream decoder. -func NewDecoder(r io.Reader) io.Reader	{ return &decoder{r: r} } +func NewDecoder(r io.Reader) io.Reader { return &decoder{r: r} }  type decoder struct { -	err	os.Error; -	readErr	os.Error; -	r	io.Reader; -	end	bool;		// saw end of message -	buf	[1024]byte;	// leftover input -	nbuf	int; -	out	[]byte;	// leftover decoded output -	outbuf	[1024]byte; +	err     os.Error +	readErr os.Error +	r       io.Reader +	end     bool       // saw end of message +	buf     [1024]byte // leftover input +	nbuf    int +	out     []byte // leftover decoded output +	outbuf  [1024]byte  }  func (d *decoder) Read(p []byte) (n int, err os.Error) { @@ -267,19 +267,19 @@ func (d *decoder) Read(p []byte) (n int, err os.Error) {  	for {  		// Copy leftover output from last decode.  		if len(d.out) > 0 { -			n = copy(p, d.out); -			d.out = d.out[n:]; -			return; +			n = copy(p, d.out) +			d.out = d.out[n:] +			return  		}  		// Decode leftover input from last read. -		var nn, nsrc, ndst int; +		var nn, nsrc, ndst int  		if d.nbuf > 0 { -			ndst, nsrc, d.err = Decode(&d.outbuf, d.buf[0:d.nbuf], d.readErr != nil); +			ndst, nsrc, d.err = Decode(&d.outbuf, d.buf[0:d.nbuf], d.readErr != nil)  			if ndst > 0 { -				d.out = d.outbuf[0:ndst]; -				d.nbuf = copy(&d.buf, d.buf[nsrc:d.nbuf]); -				continue;	// copy out and return +				d.out = d.outbuf[0:ndst] +				d.nbuf = copy(&d.buf, d.buf[nsrc:d.nbuf]) +				continue // copy out and return  			}  		} @@ -288,13 +288,13 @@ func (d *decoder) Read(p []byte) (n int, err os.Error) {  			return 0, d.err  		}  		if d.readErr != nil { -			d.err = d.readErr; -			return 0, d.err; +			d.err = d.readErr +			return 0, d.err  		}  		// Read more data. -		nn, d.readErr = d.r.Read(d.buf[d.nbuf:]); -		d.nbuf += nn; +		nn, d.readErr = d.r.Read(d.buf[d.nbuf:]) +		d.nbuf += nn  	} -	panic("unreachable"); +	panic("unreachable")  } diff --git a/src/pkg/encoding/ascii85/ascii85_test.go b/src/pkg/encoding/ascii85/ascii85_test.go index 5ac49c675..7eb245ee2 100644 --- a/src/pkg/encoding/ascii85/ascii85_test.go +++ b/src/pkg/encoding/ascii85/ascii85_test.go @@ -5,16 +5,16 @@  package ascii85  import ( -	"bytes"; -	"io/ioutil"; -	"os"; -	"reflect"; -	"strings"; -	"testing"; +	"bytes" +	"io/ioutil" +	"os" +	"reflect" +	"strings" +	"testing"  )  type testpair struct { -	decoded, encoded string; +	decoded, encoded string  }  var pairs = []testpair{ @@ -35,88 +35,88 @@ var pairs = []testpair{  var bigtest = pairs[len(pairs)-1]  func testEqual(t *testing.T, msg string, args ...) bool { -	v := reflect.NewValue(args).(*reflect.StructValue); -	v1 := v.Field(v.NumField() - 2); -	v2 := v.Field(v.NumField() - 1); +	v := reflect.NewValue(args).(*reflect.StructValue) +	v1 := v.Field(v.NumField() - 2) +	v2 := v.Field(v.NumField() - 1)  	if v1.Interface() != v2.Interface() { -		t.Errorf(msg, args); -		return false; +		t.Errorf(msg, args) +		return false  	} -	return true; +	return true  }  func strip85(s string) string { -	t := make([]byte, len(s)); -	w := 0; +	t := make([]byte, len(s)) +	w := 0  	for r := 0; r < len(s); r++ { -		c := s[r]; +		c := s[r]  		if c > ' ' { -			t[w] = c; -			w++; +			t[w] = c +			w++  		}  	} -	return string(t[0:w]); +	return string(t[0:w])  }  func TestEncode(t *testing.T) {  	for _, p := range pairs { -		buf := make([]byte, MaxEncodedLen(len(p.decoded))); -		n := Encode(buf, strings.Bytes(p.decoded)); -		buf = buf[0:n]; -		testEqual(t, "Encode(%q) = %q, want %q", p.decoded, strip85(string(buf)), strip85(p.encoded)); +		buf := make([]byte, MaxEncodedLen(len(p.decoded))) +		n := Encode(buf, strings.Bytes(p.decoded)) +		buf = buf[0:n] +		testEqual(t, "Encode(%q) = %q, want %q", p.decoded, strip85(string(buf)), strip85(p.encoded))  	}  }  func TestEncoder(t *testing.T) {  	for _, p := range pairs { -		bb := &bytes.Buffer{}; -		encoder := NewEncoder(bb); -		encoder.Write(strings.Bytes(p.decoded)); -		encoder.Close(); -		testEqual(t, "Encode(%q) = %q, want %q", p.decoded, strip85(bb.String()), strip85(p.encoded)); +		bb := &bytes.Buffer{} +		encoder := NewEncoder(bb) +		encoder.Write(strings.Bytes(p.decoded)) +		encoder.Close() +		testEqual(t, "Encode(%q) = %q, want %q", p.decoded, strip85(bb.String()), strip85(p.encoded))  	}  }  func TestEncoderBuffering(t *testing.T) { -	input := strings.Bytes(bigtest.decoded); +	input := strings.Bytes(bigtest.decoded)  	for bs := 1; bs <= 12; bs++ { -		bb := &bytes.Buffer{}; -		encoder := NewEncoder(bb); +		bb := &bytes.Buffer{} +		encoder := NewEncoder(bb)  		for pos := 0; pos < len(input); pos += bs { -			end := pos + bs; +			end := pos + bs  			if end > len(input) {  				end = len(input)  			} -			n, err := encoder.Write(input[pos:end]); -			testEqual(t, "Write(%q) gave error %v, want %v", input[pos:end], err, os.Error(nil)); -			testEqual(t, "Write(%q) gave length %v, want %v", input[pos:end], n, end-pos); +			n, err := encoder.Write(input[pos:end]) +			testEqual(t, "Write(%q) gave error %v, want %v", input[pos:end], err, os.Error(nil)) +			testEqual(t, "Write(%q) gave length %v, want %v", input[pos:end], n, end-pos)  		} -		err := encoder.Close(); -		testEqual(t, "Close gave error %v, want %v", err, os.Error(nil)); -		testEqual(t, "Encoding/%d of %q = %q, want %q", bs, bigtest.decoded, strip85(bb.String()), strip85(bigtest.encoded)); +		err := encoder.Close() +		testEqual(t, "Close gave error %v, want %v", err, os.Error(nil)) +		testEqual(t, "Encoding/%d of %q = %q, want %q", bs, bigtest.decoded, strip85(bb.String()), strip85(bigtest.encoded))  	}  }  func TestDecode(t *testing.T) {  	for _, p := range pairs { -		dbuf := make([]byte, 4*len(p.encoded)); -		ndst, nsrc, err := Decode(dbuf, strings.Bytes(p.encoded), true); -		testEqual(t, "Decode(%q) = error %v, want %v", p.encoded, err, os.Error(nil)); -		testEqual(t, "Decode(%q) = nsrc %v, want %v", p.encoded, nsrc, len(p.encoded)); -		testEqual(t, "Decode(%q) = ndst %v, want %v", p.encoded, ndst, len(p.decoded)); -		testEqual(t, "Decode(%q) = %q, want %q", p.encoded, string(dbuf[0:ndst]), p.decoded); +		dbuf := make([]byte, 4*len(p.encoded)) +		ndst, nsrc, err := Decode(dbuf, strings.Bytes(p.encoded), true) +		testEqual(t, "Decode(%q) = error %v, want %v", p.encoded, err, os.Error(nil)) +		testEqual(t, "Decode(%q) = nsrc %v, want %v", p.encoded, nsrc, len(p.encoded)) +		testEqual(t, "Decode(%q) = ndst %v, want %v", p.encoded, ndst, len(p.decoded)) +		testEqual(t, "Decode(%q) = %q, want %q", p.encoded, string(dbuf[0:ndst]), p.decoded)  	}  }  func TestDecoder(t *testing.T) {  	for _, p := range pairs { -		decoder := NewDecoder(bytes.NewBufferString(p.encoded)); -		dbuf, err := ioutil.ReadAll(decoder); +		decoder := NewDecoder(bytes.NewBufferString(p.encoded)) +		dbuf, err := ioutil.ReadAll(decoder)  		if err != nil {  			t.Fatal("Read failed", err)  		} -		testEqual(t, "Read from %q = length %v, want %v", p.encoded, len(dbuf), len(p.decoded)); -		testEqual(t, "Decoding of %q = %q, want %q", p.encoded, string(dbuf), p.decoded); +		testEqual(t, "Read from %q = length %v, want %v", p.encoded, len(dbuf), len(p.decoded)) +		testEqual(t, "Decoding of %q = %q, want %q", p.encoded, string(dbuf), p.decoded)  		if err != nil {  			testEqual(t, "Read from %q = %v, want %v", p.encoded, err, os.EOF)  		} @@ -125,31 +125,31 @@ func TestDecoder(t *testing.T) {  func TestDecoderBuffering(t *testing.T) {  	for bs := 1; bs <= 12; bs++ { -		decoder := NewDecoder(bytes.NewBufferString(bigtest.encoded)); -		buf := make([]byte, len(bigtest.decoded)+12); -		var total int; +		decoder := NewDecoder(bytes.NewBufferString(bigtest.encoded)) +		buf := make([]byte, len(bigtest.decoded)+12) +		var total int  		for total = 0; total < len(bigtest.decoded); { -			n, err := decoder.Read(buf[total : total+bs]); -			testEqual(t, "Read from %q at pos %d = %d, %v, want _, %v", bigtest.encoded, total, n, err, os.Error(nil)); -			total += n; +			n, err := decoder.Read(buf[total : total+bs]) +			testEqual(t, "Read from %q at pos %d = %d, %v, want _, %v", bigtest.encoded, total, n, err, os.Error(nil)) +			total += n  		} -		testEqual(t, "Decoding/%d of %q = %q, want %q", bs, bigtest.encoded, string(buf[0:total]), bigtest.decoded); +		testEqual(t, "Decoding/%d of %q = %q, want %q", bs, bigtest.encoded, string(buf[0:total]), bigtest.decoded)  	}  }  func TestDecodeCorrupt(t *testing.T) {  	type corrupt struct { -		e	string; -		p	int; +		e string +		p int  	}  	examples := []corrupt{  		corrupt{"v", 0},  		corrupt{"!z!!!!!!!!!", 1}, -	}; +	}  	for _, e := range examples { -		dbuf := make([]byte, 4*len(e.e)); -		_, _, err := Decode(dbuf, strings.Bytes(e.e), true); +		dbuf := make([]byte, 4*len(e.e)) +		_, _, err := Decode(dbuf, strings.Bytes(e.e), true)  		switch err := err.(type) {  		case CorruptInputError:  			testEqual(t, "Corruption in %q at offset %v, want %v", e.e, int(err), e.p) @@ -160,34 +160,34 @@ func TestDecodeCorrupt(t *testing.T) {  }  func TestBig(t *testing.T) { -	n := 3*1000 + 1; -	raw := make([]byte, n); -	const alpha = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; +	n := 3*1000 + 1 +	raw := make([]byte, n) +	const alpha = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"  	for i := 0; i < n; i++ {  		raw[i] = alpha[i%len(alpha)]  	} -	encoded := new(bytes.Buffer); -	w := NewEncoder(encoded); -	nn, err := w.Write(raw); +	encoded := new(bytes.Buffer) +	w := NewEncoder(encoded) +	nn, err := w.Write(raw)  	if nn != n || err != nil {  		t.Fatalf("Encoder.Write(raw) = %d, %v want %d, nil", nn, err, n)  	} -	err = w.Close(); +	err = w.Close()  	if err != nil {  		t.Fatalf("Encoder.Close() = %v want nil", err)  	} -	decoded, err := ioutil.ReadAll(NewDecoder(encoded)); +	decoded, err := ioutil.ReadAll(NewDecoder(encoded))  	if err != nil {  		t.Fatalf("io.ReadAll(NewDecoder(...)): %v", err)  	}  	if !bytes.Equal(raw, decoded) { -		var i int; +		var i int  		for i = 0; i < len(decoded) && i < len(raw); i++ {  			if decoded[i] != raw[i] {  				break  			}  		} -		t.Errorf("Decode(Encode(%d-byte string)) failed at offset %d", n, i); +		t.Errorf("Decode(Encode(%d-byte string)) failed at offset %d", n, i)  	}  } | 
