// Copyright (c) 2019 Klaus Post. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package s2 import ( "bytes" "fmt" "math" "testing" ) func TestEncodeHuge(t *testing.T) { if true { t.Skip("Takes too much memory") } test := func(t *testing.T, data []byte) { comp := Encode(make([]byte, MaxEncodedLen(len(data))), data) decoded, err := Decode(nil, comp) if err != nil { t.Error(err) return } if !bytes.Equal(data, decoded) { t.Error("block decoder mismatch") return } if mel := MaxEncodedLen(len(data)); len(comp) > mel { t.Error(fmt.Errorf("MaxEncodedLen Exceed: input: %d, mel: %d, got %d", len(data), mel, len(comp))) return } comp = EncodeBetter(make([]byte, MaxEncodedLen(len(data))), data) decoded, err = Decode(nil, comp) if err != nil { t.Error(err) return } if !bytes.Equal(data, decoded) { t.Error("block decoder mismatch") return } if mel := MaxEncodedLen(len(data)); len(comp) > mel { t.Error(fmt.Errorf("MaxEncodedLen Exceed: input: %d, mel: %d, got %d", len(data), mel, len(comp))) return } comp = EncodeBest(make([]byte, MaxEncodedLen(len(data))), data) decoded, err = Decode(nil, comp) if err != nil { t.Error(err) return } if !bytes.Equal(data, decoded) { t.Error("block decoder mismatch") return } if mel := MaxEncodedLen(len(data)); len(comp) > mel { t.Error(fmt.Errorf("MaxEncodedLen Exceed: input: %d, mel: %d, got %d", len(data), mel, len(comp))) return } } test(t, make([]byte, math.MaxInt32)) if math.MaxInt > math.MaxInt32 { x := int64(math.MaxInt32 + math.MaxUint16) test(t, make([]byte, x)) } test(t, make([]byte, MaxBlockSize)) }