From bf9a8355494eac18812f3caf6d469962824f627f Mon Sep 17 00:00:00 2001 From: Harris Date: Mon, 28 Oct 2019 10:34:21 -0500 Subject: Reduce allocations when writing Fix #494 If a row is full, don't bother allocating a new one, just return it. Use the last populated row as a hint for the size of new rows. Simplify checkSheet to remove row map --- file_test.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 file_test.go (limited to 'file_test.go') diff --git a/file_test.go b/file_test.go new file mode 100644 index 0000000..6c30f4a --- /dev/null +++ b/file_test.go @@ -0,0 +1,27 @@ +package excelize + +import ( + "testing" +) + +func BenchmarkWrite(b *testing.B) { + const s = "This is test data" + for i := 0; i < b.N; i++ { + f := NewFile() + for row := 1; row <= 10000; row++ { + for col := 1; col <= 20; col++ { + val, err := CoordinatesToCellName(col, row) + if err != nil { + panic(err) + } + f.SetCellDefault("Sheet1", val, s) + } + } + // Save xlsx file by the given path. + err := f.SaveAs("./test.xlsx") + if err != nil { + panic(err) + } + } + +} -- cgit v1.2.1 From 1666d04559d9f5b579ab7c850ccc95863c31bd25 Mon Sep 17 00:00:00 2001 From: xuri Date: Tue, 24 Dec 2019 01:09:28 +0800 Subject: optimization: checking error in unit tests --- file_test.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'file_test.go') diff --git a/file_test.go b/file_test.go index 6c30f4a..97ff720 100644 --- a/file_test.go +++ b/file_test.go @@ -14,7 +14,9 @@ func BenchmarkWrite(b *testing.B) { if err != nil { panic(err) } - f.SetCellDefault("Sheet1", val, s) + if err := f.SetCellDefault("Sheet1", val, s); err != nil { + panic(err) + } } } // Save xlsx file by the given path. -- cgit v1.2.1 From 5ca7231ed408ac264f509ff52b5d28ff4fbda757 Mon Sep 17 00:00:00 2001 From: xuri Date: Fri, 3 Jan 2020 23:57:25 +0800 Subject: optimize code and comments: use println errors instead of panic --- file_test.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'file_test.go') diff --git a/file_test.go b/file_test.go index 97ff720..8c5050c 100644 --- a/file_test.go +++ b/file_test.go @@ -12,18 +12,17 @@ func BenchmarkWrite(b *testing.B) { for col := 1; col <= 20; col++ { val, err := CoordinatesToCellName(col, row) if err != nil { - panic(err) + b.Error(err) } if err := f.SetCellDefault("Sheet1", val, s); err != nil { - panic(err) + b.Error(err) } } } // Save xlsx file by the given path. err := f.SaveAs("./test.xlsx") if err != nil { - panic(err) + b.Error(err) } } - } -- cgit v1.2.1 From 736362694adff47424726a4e4e2569f8247e7fcf Mon Sep 17 00:00:00 2001 From: xuri Date: Wed, 1 Apr 2020 00:38:12 +0800 Subject: Add unit test case --- file_test.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'file_test.go') diff --git a/file_test.go b/file_test.go index 8c5050c..e27b754 100644 --- a/file_test.go +++ b/file_test.go @@ -1,7 +1,12 @@ package excelize import ( + "bufio" + "bytes" + "strings" "testing" + + "github.com/stretchr/testify/assert" ) func BenchmarkWrite(b *testing.B) { @@ -26,3 +31,18 @@ func BenchmarkWrite(b *testing.B) { } } } + +func TestWriteTo(t *testing.T) { + f := File{} + buf := bytes.Buffer{} + f.XLSX = make(map[string][]byte, 0) + f.XLSX["/d/"] = []byte("s") + _, err := f.WriteTo(bufio.NewWriter(&buf)) + assert.EqualError(t, err, "zip: write to directory") + delete(f.XLSX, "/d/") + // Test file path overflow + const maxUint16 = 1<<16 - 1 + f.XLSX[strings.Repeat("s", maxUint16+1)] = nil + _, err = f.WriteTo(bufio.NewWriter(&buf)) + assert.EqualError(t, err, "zip: FileHeader.Name too long") +} -- cgit v1.2.1