mirror of
https://github.com/google/wuffs.git
synced 2026-01-18 17:11:32 +01:00
Let test binaries run from any dir in the repo
Also spin out generate.WuffsRoot into its own package.
This commit is contained in:
@@ -24,6 +24,8 @@ import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/google/wuffs/lang/wuffsroot"
|
||||
|
||||
cf "github.com/google/wuffs/cmd/commonflags"
|
||||
)
|
||||
|
||||
@@ -132,7 +134,9 @@ func doBenchTest1(filename string, bench bool, ccompilers string, focus string,
|
||||
outCmd := exec.Command(out, outArgs...)
|
||||
outCmd.Stdout = os.Stdout
|
||||
outCmd.Stderr = os.Stderr
|
||||
outCmd.Dir = filepath.Dir(filename)
|
||||
if outCmd.Dir, err = wuffsroot.Value(); err != nil {
|
||||
return false, err
|
||||
}
|
||||
if err := outCmd.Run(); err == nil {
|
||||
// No-op.
|
||||
} else if _, ok := err.(*exec.ExitError); ok {
|
||||
|
||||
@@ -25,7 +25,7 @@ import (
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/google/wuffs/lang/generate"
|
||||
"github.com/google/wuffs/lang/wuffsroot"
|
||||
)
|
||||
|
||||
var commands = []struct {
|
||||
@@ -65,7 +65,7 @@ func main1() error {
|
||||
flag.Usage = usage
|
||||
flag.Parse()
|
||||
|
||||
wuffsRoot, err := generate.WuffsRoot()
|
||||
wuffsRoot, err := wuffsroot.Value()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -15,18 +15,16 @@
|
||||
package generate
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"go/build"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/google/wuffs/lang/check"
|
||||
"github.com/google/wuffs/lang/parse"
|
||||
"github.com/google/wuffs/lang/wuffsroot"
|
||||
|
||||
a "github.com/google/wuffs/lang/ast"
|
||||
t "github.com/google/wuffs/lang/token"
|
||||
@@ -138,37 +136,9 @@ func ParseFiles(tm *t.Map, filenames []string, opts *parse.Options) (files []*a.
|
||||
}
|
||||
|
||||
func resolveUse(usePath string) ([]byte, error) {
|
||||
wuffsRoot, err := WuffsRoot()
|
||||
wuffsRoot, err := wuffsroot.Value()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return ioutil.ReadFile(filepath.Join(wuffsRoot, "gen", "wuffs", filepath.FromSlash(usePath)))
|
||||
}
|
||||
|
||||
var cachedWuffsRoot struct {
|
||||
mu sync.Mutex
|
||||
value string
|
||||
}
|
||||
|
||||
func WuffsRoot() (string, error) {
|
||||
cachedWuffsRoot.mu.Lock()
|
||||
value := cachedWuffsRoot.value
|
||||
cachedWuffsRoot.mu.Unlock()
|
||||
|
||||
if value != "" {
|
||||
return value, nil
|
||||
}
|
||||
|
||||
// TODO: look for a WUFFSROOT environment variable?
|
||||
for _, p := range filepath.SplitList(build.Default.GOPATH) {
|
||||
p = filepath.Join(p, "src", "github.com", "google", "wuffs")
|
||||
if o, err := os.Stat(p); err == nil && o.IsDir() {
|
||||
cachedWuffsRoot.mu.Lock()
|
||||
cachedWuffsRoot.value = p
|
||||
cachedWuffsRoot.mu.Unlock()
|
||||
|
||||
return p, nil
|
||||
}
|
||||
}
|
||||
return "", errors.New("could not find Wuffs root directory")
|
||||
}
|
||||
|
||||
52
lang/wuffsroot/wuffsroot.go
Normal file
52
lang/wuffsroot/wuffsroot.go
Normal file
@@ -0,0 +1,52 @@
|
||||
// Copyright 2018 The Wuffs Authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// https://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package wuffsroot
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"go/build"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sync"
|
||||
)
|
||||
|
||||
var cache struct {
|
||||
mu sync.Mutex
|
||||
value string
|
||||
}
|
||||
|
||||
func Value() (string, error) {
|
||||
cache.mu.Lock()
|
||||
value := cache.value
|
||||
cache.mu.Unlock()
|
||||
|
||||
if value != "" {
|
||||
return value, nil
|
||||
}
|
||||
|
||||
// TODO: look for a WUFFSROOT environment variable? Also check that
|
||||
// wuffs-root-directory.txt exists?
|
||||
for _, p := range filepath.SplitList(build.Default.GOPATH) {
|
||||
p = filepath.Join(p, "src", "github.com", "google", "wuffs")
|
||||
if o, err := os.Stat(p); err == nil && o.IsDir() {
|
||||
cache.mu.Lock()
|
||||
cache.value = p
|
||||
cache.mu.Unlock()
|
||||
|
||||
return p, nil
|
||||
}
|
||||
}
|
||||
return "", errors.New("could not find Wuffs root directory")
|
||||
}
|
||||
@@ -68,11 +68,11 @@ the first "./a.out" with "./a.out -bench". Combine these changes with the
|
||||
// ---------------- Golden Tests
|
||||
|
||||
golden_test adler32_midsummer_gt = {
|
||||
.src_filename = "../../data/midsummer.txt", //
|
||||
.src_filename = "test/data/midsummer.txt", //
|
||||
};
|
||||
|
||||
golden_test adler32_pi_gt = {
|
||||
.src_filename = "../../data/pi.txt", //
|
||||
.src_filename = "test/data/pi.txt", //
|
||||
};
|
||||
|
||||
// ---------------- Adler32 Tests
|
||||
@@ -86,31 +86,31 @@ const char* test_wuffs_adler32_golden() {
|
||||
uint32_t want;
|
||||
} test_cases[] = {
|
||||
{
|
||||
.filename = "../../data/hat.bmp",
|
||||
.filename = "test/data/hat.bmp",
|
||||
.want = 0x3D26D034,
|
||||
},
|
||||
{
|
||||
.filename = "../../data/hat.gif",
|
||||
.filename = "test/data/hat.gif",
|
||||
.want = 0x2A5EB144,
|
||||
},
|
||||
{
|
||||
.filename = "../../data/hat.jpeg",
|
||||
.filename = "test/data/hat.jpeg",
|
||||
.want = 0x3A503B1A,
|
||||
},
|
||||
{
|
||||
.filename = "../../data/hat.lossless.webp",
|
||||
.filename = "test/data/hat.lossless.webp",
|
||||
.want = 0xD059D427,
|
||||
},
|
||||
{
|
||||
.filename = "../../data/hat.lossy.webp",
|
||||
.filename = "test/data/hat.lossy.webp",
|
||||
.want = 0xF1BB258D,
|
||||
},
|
||||
{
|
||||
.filename = "../../data/hat.png",
|
||||
.filename = "test/data/hat.png",
|
||||
.want = 0xDFC6C9C6,
|
||||
},
|
||||
{
|
||||
.filename = "../../data/hat.tiff",
|
||||
.filename = "test/data/hat.tiff",
|
||||
.want = 0xBDC011E9,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -68,11 +68,11 @@ the first "./a.out" with "./a.out -bench". Combine these changes with the
|
||||
// ---------------- Golden Tests
|
||||
|
||||
golden_test crc32_midsummer_gt = {
|
||||
.src_filename = "../../data/midsummer.txt", //
|
||||
.src_filename = "test/data/midsummer.txt", //
|
||||
};
|
||||
|
||||
golden_test crc32_pi_gt = {
|
||||
.src_filename = "../../data/pi.txt", //
|
||||
.src_filename = "test/data/pi.txt", //
|
||||
};
|
||||
|
||||
// ---------------- CRC32 Tests
|
||||
@@ -86,31 +86,31 @@ const char* test_wuffs_crc32_ieee_golden() {
|
||||
uint32_t want;
|
||||
} test_cases[] = {
|
||||
{
|
||||
.filename = "../../data/hat.bmp",
|
||||
.filename = "test/data/hat.bmp",
|
||||
.want = 0xA95A578B,
|
||||
},
|
||||
{
|
||||
.filename = "../../data/hat.gif",
|
||||
.filename = "test/data/hat.gif",
|
||||
.want = 0xD9743B6A,
|
||||
},
|
||||
{
|
||||
.filename = "../../data/hat.jpeg",
|
||||
.filename = "test/data/hat.jpeg",
|
||||
.want = 0x7F1A90CD,
|
||||
},
|
||||
{
|
||||
.filename = "../../data/hat.lossless.webp",
|
||||
.filename = "test/data/hat.lossless.webp",
|
||||
.want = 0x485AA040,
|
||||
},
|
||||
{
|
||||
.filename = "../../data/hat.lossy.webp",
|
||||
.filename = "test/data/hat.lossy.webp",
|
||||
.want = 0x89F53B4E,
|
||||
},
|
||||
{
|
||||
.filename = "../../data/hat.png",
|
||||
.filename = "test/data/hat.png",
|
||||
.want = 0xD5DA5C2F,
|
||||
},
|
||||
{
|
||||
.filename = "../../data/hat.tiff",
|
||||
.filename = "test/data/hat.tiff",
|
||||
.want = 0xBEF54503,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -74,54 +74,54 @@ the first "./a.out" with "./a.out -bench". Combine these changes with the
|
||||
// The empty comments forces clang-format to place one element per line.
|
||||
|
||||
golden_test deflate_256_bytes_gt = {
|
||||
.want_filename = "../../data/artificial/256.bytes", //
|
||||
.src_filename = "../../data/artificial/256.bytes.gz", //
|
||||
.src_offset0 = 20, //
|
||||
.src_offset1 = 281, //
|
||||
.want_filename = "test/data/artificial/256.bytes", //
|
||||
.src_filename = "test/data/artificial/256.bytes.gz", //
|
||||
.src_offset0 = 20, //
|
||||
.src_offset1 = 281, //
|
||||
};
|
||||
|
||||
golden_test deflate_deflate_backref_crosses_blocks_gt = {
|
||||
.want_filename =
|
||||
"../../data/artificial/"
|
||||
"test/data/artificial/"
|
||||
"deflate-backref-crosses-blocks.deflate.decompressed",
|
||||
.src_filename =
|
||||
"../../data/artificial/"
|
||||
"test/data/artificial/"
|
||||
"deflate-backref-crosses-blocks.deflate",
|
||||
};
|
||||
|
||||
golden_test deflate_deflate_distance_32768_gt = {
|
||||
.want_filename =
|
||||
"../../data/artificial/"
|
||||
"test/data/artificial/"
|
||||
"deflate-distance-32768.deflate.decompressed",
|
||||
.src_filename =
|
||||
"../../data/artificial/"
|
||||
"test/data/artificial/"
|
||||
"deflate-distance-32768.deflate",
|
||||
};
|
||||
|
||||
golden_test deflate_midsummer_gt = {
|
||||
.want_filename = "../../data/midsummer.txt", //
|
||||
.src_filename = "../../data/midsummer.txt.gz", //
|
||||
.src_offset0 = 24, //
|
||||
.src_offset1 = 5166, //
|
||||
.want_filename = "test/data/midsummer.txt", //
|
||||
.src_filename = "test/data/midsummer.txt.gz", //
|
||||
.src_offset0 = 24, //
|
||||
.src_offset1 = 5166, //
|
||||
};
|
||||
|
||||
golden_test deflate_pi_gt = {
|
||||
.want_filename = "../../data/pi.txt", //
|
||||
.src_filename = "../../data/pi.txt.gz", //
|
||||
.src_offset0 = 17, //
|
||||
.src_offset1 = 48335, //
|
||||
.want_filename = "test/data/pi.txt", //
|
||||
.src_filename = "test/data/pi.txt.gz", //
|
||||
.src_offset0 = 17, //
|
||||
.src_offset1 = 48335, //
|
||||
};
|
||||
|
||||
golden_test deflate_romeo_gt = {
|
||||
.want_filename = "../../data/romeo.txt", //
|
||||
.src_filename = "../../data/romeo.txt.gz", //
|
||||
.src_offset0 = 20, //
|
||||
.src_offset1 = 550, //
|
||||
.want_filename = "test/data/romeo.txt", //
|
||||
.src_filename = "test/data/romeo.txt.gz", //
|
||||
.src_offset0 = 20, //
|
||||
.src_offset1 = 550, //
|
||||
};
|
||||
|
||||
golden_test deflate_romeo_fixed_gt = {
|
||||
.want_filename = "../../data/romeo.txt", //
|
||||
.src_filename = "../../data/romeo.txt.fixed-huff.deflate", //
|
||||
.want_filename = "test/data/romeo.txt", //
|
||||
.src_filename = "test/data/romeo.txt.fixed-huff.deflate", //
|
||||
};
|
||||
|
||||
// ---------------- Deflate Tests
|
||||
|
||||
100
test/c/std/gif.c
100
test/c/std/gif.c
@@ -442,7 +442,7 @@ const char* test_wuffs_gif_call_sequence() {
|
||||
.data = global_src_slice,
|
||||
});
|
||||
|
||||
const char* z = read_file(&src, "../../data/bricks-dither.gif");
|
||||
const char* z = read_file(&src, "test/data/bricks-dither.gif");
|
||||
if (z) {
|
||||
return z;
|
||||
}
|
||||
@@ -566,13 +566,13 @@ const char* do_test_wuffs_gif_decode_animated(
|
||||
|
||||
const char* test_wuffs_gif_decode_animated_big() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_wuffs_gif_decode_animated("../../data/gifplayer-muybridge.gif",
|
||||
return do_test_wuffs_gif_decode_animated("test/data/gifplayer-muybridge.gif",
|
||||
0, 380, NULL);
|
||||
}
|
||||
|
||||
const char* test_wuffs_gif_decode_animated_medium() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_wuffs_gif_decode_animated("../../data/muybridge.gif", 0, 15,
|
||||
return do_test_wuffs_gif_decode_animated("test/data/muybridge.gif", 0, 15,
|
||||
NULL);
|
||||
}
|
||||
|
||||
@@ -589,7 +589,7 @@ const char* test_wuffs_gif_decode_animated_small() {
|
||||
make_rect_ie_u32(15, 0, 64, 40),
|
||||
};
|
||||
return do_test_wuffs_gif_decode_animated(
|
||||
"../../data/animated-red-blue.gif", want_num_loops,
|
||||
"test/data/animated-red-blue.gif", want_num_loops,
|
||||
WUFFS_TESTLIB_ARRAY_SIZE(want_frame_config_bounds),
|
||||
want_frame_config_bounds);
|
||||
}
|
||||
@@ -600,7 +600,7 @@ const char* test_wuffs_gif_decode_frame_out_of_bounds() {
|
||||
.data = global_src_slice,
|
||||
});
|
||||
const char* z =
|
||||
read_file(&src, "../../data/artificial/gif-frame-out-of-bounds.gif");
|
||||
read_file(&src, "test/data/artificial/gif-frame-out-of-bounds.gif");
|
||||
if (z) {
|
||||
return z;
|
||||
}
|
||||
@@ -730,23 +730,23 @@ const char* test_wuffs_gif_decode_frame_out_of_bounds() {
|
||||
|
||||
const char* test_wuffs_gif_decode_input_is_a_gif() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_wuffs_gif_decode("../../data/bricks-dither.gif",
|
||||
"../../data/bricks-dither.palette",
|
||||
"../../data/bricks-dither.indexes", 0);
|
||||
return do_test_wuffs_gif_decode("test/data/bricks-dither.gif",
|
||||
"test/data/bricks-dither.palette",
|
||||
"test/data/bricks-dither.indexes", 0);
|
||||
}
|
||||
|
||||
const char* test_wuffs_gif_decode_input_is_a_gif_many_big_reads() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_wuffs_gif_decode("../../data/bricks-dither.gif",
|
||||
"../../data/bricks-dither.palette",
|
||||
"../../data/bricks-dither.indexes", 4096);
|
||||
return do_test_wuffs_gif_decode("test/data/bricks-dither.gif",
|
||||
"test/data/bricks-dither.palette",
|
||||
"test/data/bricks-dither.indexes", 4096);
|
||||
}
|
||||
|
||||
const char* test_wuffs_gif_decode_input_is_a_gif_many_medium_reads() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_wuffs_gif_decode("../../data/bricks-dither.gif",
|
||||
"../../data/bricks-dither.palette",
|
||||
"../../data/bricks-dither.indexes", 787);
|
||||
return do_test_wuffs_gif_decode("test/data/bricks-dither.gif",
|
||||
"test/data/bricks-dither.palette",
|
||||
"test/data/bricks-dither.indexes", 787);
|
||||
// The magic 787 tickles being in the middle of a decode_extension skip
|
||||
// call.
|
||||
//
|
||||
@@ -755,9 +755,9 @@ const char* test_wuffs_gif_decode_input_is_a_gif_many_medium_reads() {
|
||||
|
||||
const char* test_wuffs_gif_decode_input_is_a_gif_many_small_reads() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_wuffs_gif_decode("../../data/bricks-dither.gif",
|
||||
"../../data/bricks-dither.palette",
|
||||
"../../data/bricks-dither.indexes", 13);
|
||||
return do_test_wuffs_gif_decode("test/data/bricks-dither.gif",
|
||||
"test/data/bricks-dither.palette",
|
||||
"test/data/bricks-dither.indexes", 13);
|
||||
}
|
||||
|
||||
const char* test_wuffs_gif_decode_input_is_a_png() {
|
||||
@@ -767,7 +767,7 @@ const char* test_wuffs_gif_decode_input_is_a_png() {
|
||||
.data = global_src_slice,
|
||||
});
|
||||
|
||||
const char* z = read_file(&src, "../../data/bricks-dither.png");
|
||||
const char* z = read_file(&src, "test/data/bricks-dither.png");
|
||||
if (z) {
|
||||
return z;
|
||||
}
|
||||
@@ -794,7 +794,7 @@ const char* test_wuffs_gif_decode_multiple_loop_counts() {
|
||||
.data = global_src_slice,
|
||||
});
|
||||
const char* z =
|
||||
read_file(&src, "../../data/artificial/gif-multiple-loop-counts.gif");
|
||||
read_file(&src, "test/data/artificial/gif-multiple-loop-counts.gif");
|
||||
if (z) {
|
||||
return z;
|
||||
}
|
||||
@@ -857,7 +857,7 @@ const char* do_test_wuffs_gif_num_decoded(bool frame_config) {
|
||||
.data = global_src_slice,
|
||||
});
|
||||
|
||||
const char* z = read_file(&src, "../../data/animated-red-blue.gif");
|
||||
const char* z = read_file(&src, "test/data/animated-red-blue.gif");
|
||||
if (z) {
|
||||
return z;
|
||||
}
|
||||
@@ -942,7 +942,7 @@ const char* do_test_wuffs_gif_io_position(bool chunked) {
|
||||
wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
|
||||
.data = global_src_slice,
|
||||
});
|
||||
const char* z = read_file(&src, "../../data/animated-red-blue.gif");
|
||||
const char* z = read_file(&src, "test/data/animated-red-blue.gif");
|
||||
if (z) {
|
||||
return z;
|
||||
}
|
||||
@@ -1144,67 +1144,67 @@ const char* do_test_mimic_gif_decode(const char* filename) {
|
||||
|
||||
const char* test_mimic_gif_decode_animated_small() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_mimic_gif_decode("../../data/animated-red-blue.gif");
|
||||
return do_test_mimic_gif_decode("test/data/animated-red-blue.gif");
|
||||
}
|
||||
|
||||
const char* test_mimic_gif_decode_bricks_dither() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_mimic_gif_decode("../../data/bricks-dither.gif");
|
||||
return do_test_mimic_gif_decode("test/data/bricks-dither.gif");
|
||||
}
|
||||
|
||||
const char* test_mimic_gif_decode_bricks_gray() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_mimic_gif_decode("../../data/bricks-gray.gif");
|
||||
return do_test_mimic_gif_decode("test/data/bricks-gray.gif");
|
||||
}
|
||||
|
||||
const char* test_mimic_gif_decode_bricks_nodither() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_mimic_gif_decode("../../data/bricks-nodither.gif");
|
||||
return do_test_mimic_gif_decode("test/data/bricks-nodither.gif");
|
||||
}
|
||||
|
||||
const char* test_mimic_gif_decode_gifplayer_muybridge() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_mimic_gif_decode("../../data/gifplayer-muybridge.gif");
|
||||
return do_test_mimic_gif_decode("test/data/gifplayer-muybridge.gif");
|
||||
}
|
||||
|
||||
const char* test_mimic_gif_decode_harvesters() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_mimic_gif_decode("../../data/harvesters.gif");
|
||||
return do_test_mimic_gif_decode("test/data/harvesters.gif");
|
||||
}
|
||||
|
||||
const char* test_mimic_gif_decode_hat() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_mimic_gif_decode("../../data/hat.gif");
|
||||
return do_test_mimic_gif_decode("test/data/hat.gif");
|
||||
}
|
||||
|
||||
const char* test_mimic_gif_decode_hibiscus_primitive() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_mimic_gif_decode("../../data/hibiscus.primitive.gif");
|
||||
return do_test_mimic_gif_decode("test/data/hibiscus.primitive.gif");
|
||||
}
|
||||
|
||||
const char* test_mimic_gif_decode_hibiscus_regular() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_mimic_gif_decode("../../data/hibiscus.regular.gif");
|
||||
return do_test_mimic_gif_decode("test/data/hibiscus.regular.gif");
|
||||
}
|
||||
|
||||
const char* test_mimic_gif_decode_hippopotamus_interlaced() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_mimic_gif_decode("../../data/hippopotamus.interlaced.gif");
|
||||
return do_test_mimic_gif_decode("test/data/hippopotamus.interlaced.gif");
|
||||
}
|
||||
|
||||
const char* test_mimic_gif_decode_hippopotamus_regular() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_mimic_gif_decode("../../data/hippopotamus.regular.gif");
|
||||
return do_test_mimic_gif_decode("test/data/hippopotamus.regular.gif");
|
||||
}
|
||||
|
||||
const char* test_mimic_gif_decode_muybridge() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_mimic_gif_decode("../../data/muybridge.gif");
|
||||
return do_test_mimic_gif_decode("test/data/muybridge.gif");
|
||||
}
|
||||
|
||||
const char* test_mimic_gif_decode_pjw_thumbnail() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_mimic_gif_decode("../../data/pjw-thumbnail.gif");
|
||||
return do_test_mimic_gif_decode("test/data/pjw-thumbnail.gif");
|
||||
}
|
||||
|
||||
#endif // WUFFS_MIMIC
|
||||
@@ -1246,42 +1246,42 @@ const char* do_bench_gif_decode(
|
||||
|
||||
const char* bench_wuffs_gif_decode_1k_bw() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_bench_gif_decode(wuffs_gif_decode, "../../data/pjw-thumbnail.gif",
|
||||
return do_bench_gif_decode(wuffs_gif_decode, "test/data/pjw-thumbnail.gif",
|
||||
2000);
|
||||
}
|
||||
|
||||
const char* bench_wuffs_gif_decode_1k_color() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_bench_gif_decode(wuffs_gif_decode,
|
||||
"../../data/hippopotamus.regular.gif", 1000);
|
||||
"test/data/hippopotamus.regular.gif", 1000);
|
||||
}
|
||||
|
||||
const char* bench_wuffs_gif_decode_10k() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_bench_gif_decode(wuffs_gif_decode, "../../data/hat.gif", 100);
|
||||
return do_bench_gif_decode(wuffs_gif_decode, "test/data/hat.gif", 100);
|
||||
}
|
||||
|
||||
const char* bench_wuffs_gif_decode_100k_artificial() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_bench_gif_decode(wuffs_gif_decode,
|
||||
"../../data/hibiscus.primitive.gif", 15);
|
||||
"test/data/hibiscus.primitive.gif", 15);
|
||||
}
|
||||
|
||||
const char* bench_wuffs_gif_decode_100k_realistic() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_bench_gif_decode(wuffs_gif_decode,
|
||||
"../../data/hibiscus.regular.gif", 10);
|
||||
return do_bench_gif_decode(wuffs_gif_decode, "test/data/hibiscus.regular.gif",
|
||||
10);
|
||||
}
|
||||
|
||||
const char* bench_wuffs_gif_decode_1000k() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_bench_gif_decode(wuffs_gif_decode, "../../data/harvesters.gif", 1);
|
||||
return do_bench_gif_decode(wuffs_gif_decode, "test/data/harvesters.gif", 1);
|
||||
}
|
||||
|
||||
const char* bench_wuffs_gif_decode_anim_screencap() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_bench_gif_decode(wuffs_gif_decode,
|
||||
"../../data/gifplayer-muybridge.gif", 1);
|
||||
"test/data/gifplayer-muybridge.gif", 1);
|
||||
}
|
||||
|
||||
// ---------------- Mimic Benches
|
||||
@@ -1290,42 +1290,42 @@ const char* bench_wuffs_gif_decode_anim_screencap() {
|
||||
|
||||
const char* bench_mimic_gif_decode_1k_bw() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_bench_gif_decode(mimic_gif_decode, "../../data/pjw-thumbnail.gif",
|
||||
return do_bench_gif_decode(mimic_gif_decode, "test/data/pjw-thumbnail.gif",
|
||||
2000);
|
||||
}
|
||||
|
||||
const char* bench_mimic_gif_decode_1k_color() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_bench_gif_decode(mimic_gif_decode,
|
||||
"../../data/hippopotamus.regular.gif", 1000);
|
||||
"test/data/hippopotamus.regular.gif", 1000);
|
||||
}
|
||||
|
||||
const char* bench_mimic_gif_decode_10k() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_bench_gif_decode(mimic_gif_decode, "../../data/hat.gif", 100);
|
||||
return do_bench_gif_decode(mimic_gif_decode, "test/data/hat.gif", 100);
|
||||
}
|
||||
|
||||
const char* bench_mimic_gif_decode_100k_artificial() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_bench_gif_decode(mimic_gif_decode,
|
||||
"../../data/hibiscus.primitive.gif", 15);
|
||||
"test/data/hibiscus.primitive.gif", 15);
|
||||
}
|
||||
|
||||
const char* bench_mimic_gif_decode_100k_realistic() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_bench_gif_decode(mimic_gif_decode,
|
||||
"../../data/hibiscus.regular.gif", 10);
|
||||
return do_bench_gif_decode(mimic_gif_decode, "test/data/hibiscus.regular.gif",
|
||||
10);
|
||||
}
|
||||
|
||||
const char* bench_mimic_gif_decode_1000k() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_bench_gif_decode(mimic_gif_decode, "../../data/harvesters.gif", 1);
|
||||
return do_bench_gif_decode(mimic_gif_decode, "test/data/harvesters.gif", 1);
|
||||
}
|
||||
|
||||
const char* bench_mimic_gif_decode_anim_screencap() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_bench_gif_decode(mimic_gif_decode,
|
||||
"../../data/gifplayer-muybridge.gif", 1);
|
||||
"test/data/gifplayer-muybridge.gif", 1);
|
||||
}
|
||||
|
||||
#endif // WUFFS_MIMIC
|
||||
|
||||
@@ -70,13 +70,13 @@ the first "./a.out" with "./a.out -bench". Combine these changes with the
|
||||
// ---------------- Golden Tests
|
||||
|
||||
golden_test gzip_midsummer_gt = {
|
||||
.want_filename = "../../data/midsummer.txt", //
|
||||
.src_filename = "../../data/midsummer.txt.gz", //
|
||||
.want_filename = "test/data/midsummer.txt", //
|
||||
.src_filename = "test/data/midsummer.txt.gz", //
|
||||
};
|
||||
|
||||
golden_test gzip_pi_gt = {
|
||||
.want_filename = "../../data/pi.txt", //
|
||||
.src_filename = "../../data/pi.txt.gz", //
|
||||
.want_filename = "test/data/pi.txt", //
|
||||
.src_filename = "test/data/pi.txt.gz", //
|
||||
};
|
||||
|
||||
// ---------------- Gzip Tests
|
||||
|
||||
@@ -165,36 +165,36 @@ const char* do_test_wuffs_lzw_decode(const char* src_filename,
|
||||
|
||||
const char* test_wuffs_lzw_decode_many_big_reads() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_wuffs_lzw_decode("../../data/bricks-gray.indexes.giflzw",
|
||||
14731, "../../data/bricks-gray.indexes",
|
||||
19200, 0, 4096);
|
||||
return do_test_wuffs_lzw_decode("test/data/bricks-gray.indexes.giflzw", 14731,
|
||||
"test/data/bricks-gray.indexes", 19200, 0,
|
||||
4096);
|
||||
}
|
||||
|
||||
const char* test_wuffs_lzw_decode_many_small_writes_reads() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_wuffs_lzw_decode("../../data/bricks-gray.indexes.giflzw",
|
||||
14731, "../../data/bricks-gray.indexes",
|
||||
19200, 41, 43);
|
||||
return do_test_wuffs_lzw_decode("test/data/bricks-gray.indexes.giflzw", 14731,
|
||||
"test/data/bricks-gray.indexes", 19200, 41,
|
||||
43);
|
||||
}
|
||||
|
||||
const char* test_wuffs_lzw_decode_bricks_dither() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_wuffs_lzw_decode("../../data/bricks-dither.indexes.giflzw",
|
||||
14923, "../../data/bricks-dither.indexes",
|
||||
return do_test_wuffs_lzw_decode("test/data/bricks-dither.indexes.giflzw",
|
||||
14923, "test/data/bricks-dither.indexes",
|
||||
19200, 0, 0);
|
||||
}
|
||||
|
||||
const char* test_wuffs_lzw_decode_bricks_nodither() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_wuffs_lzw_decode("../../data/bricks-nodither.indexes.giflzw",
|
||||
13382, "../../data/bricks-nodither.indexes",
|
||||
return do_test_wuffs_lzw_decode("test/data/bricks-nodither.indexes.giflzw",
|
||||
13382, "test/data/bricks-nodither.indexes",
|
||||
19200, 0, 0);
|
||||
}
|
||||
|
||||
const char* test_wuffs_lzw_decode_pi() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_test_wuffs_lzw_decode("../../data/pi.txt.giflzw", 50550,
|
||||
"../../data/pi.txt", 100003, 0, 0);
|
||||
return do_test_wuffs_lzw_decode("test/data/pi.txt.giflzw", 50550,
|
||||
"test/data/pi.txt", 100003, 0, 0);
|
||||
}
|
||||
|
||||
// ---------------- LZW Benches
|
||||
@@ -248,12 +248,12 @@ const char* do_bench_wuffs_lzw_decode(const char* filename,
|
||||
|
||||
const char* bench_wuffs_lzw_decode_20k() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_bench_wuffs_lzw_decode("../../data/bricks-gray.indexes.giflzw", 50);
|
||||
return do_bench_wuffs_lzw_decode("test/data/bricks-gray.indexes.giflzw", 50);
|
||||
}
|
||||
|
||||
const char* bench_wuffs_lzw_decode_100k() {
|
||||
CHECK_FOCUS(__func__);
|
||||
return do_bench_wuffs_lzw_decode("../../data/pi.txt.giflzw", 10);
|
||||
return do_bench_wuffs_lzw_decode("test/data/pi.txt.giflzw", 10);
|
||||
}
|
||||
|
||||
// ---------------- Manifest
|
||||
|
||||
@@ -70,13 +70,13 @@ the first "./a.out" with "./a.out -bench". Combine these changes with the
|
||||
// ---------------- Golden Tests
|
||||
|
||||
golden_test zlib_midsummer_gt = {
|
||||
.want_filename = "../../data/midsummer.txt", //
|
||||
.src_filename = "../../data/midsummer.txt.zlib", //
|
||||
.want_filename = "test/data/midsummer.txt", //
|
||||
.src_filename = "test/data/midsummer.txt.zlib", //
|
||||
};
|
||||
|
||||
golden_test zlib_pi_gt = {
|
||||
.want_filename = "../../data/pi.txt", //
|
||||
.src_filename = "../../data/pi.txt.zlib", //
|
||||
.want_filename = "test/data/pi.txt", //
|
||||
.src_filename = "test/data/pi.txt.zlib", //
|
||||
};
|
||||
|
||||
// ---------------- Zlib Tests
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define BUFFER_SIZE (64 * 1024 * 1024)
|
||||
|
||||
@@ -209,9 +210,39 @@ void bench_finish(uint64_t iters, uint64_t n_bytes) {
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
const char* chdir_to_the_wuffs_root_directory() {
|
||||
// Chdir to the Wuffs root directory, assuming that we're starting from
|
||||
// somewhere in the Wuffs repository, so we can find the root directory by
|
||||
// running chdir("..") a number of times.
|
||||
int n;
|
||||
for (n = 0; n < 64; n++) {
|
||||
if (access("wuffs-root-directory.txt", F_OK) == 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// If we're at the root "/", chdir("..") won't change anything.
|
||||
char cwd_buffer[4];
|
||||
char* cwd = getcwd(cwd_buffer, 4);
|
||||
if ((cwd != NULL) && (cwd[0] == '/') && (cwd[1] == '\x00')) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (chdir("..")) {
|
||||
return "could not chdir(\"..\")";
|
||||
}
|
||||
}
|
||||
return "could not find Wuffs root directory; chdir there before running this program";
|
||||
}
|
||||
|
||||
typedef const char* (*proc)();
|
||||
|
||||
int test_main(int argc, char** argv, proc* tests, proc* benches) {
|
||||
const char* z = chdir_to_the_wuffs_root_directory();
|
||||
if (z) {
|
||||
fprintf(stderr, "%s\n", z);
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool bench = false;
|
||||
int reps = 5;
|
||||
|
||||
|
||||
4
wuffs-root-directory.txt
Normal file
4
wuffs-root-directory.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
This placeholder file indicates the root of the Wuffs repository.
|
||||
|
||||
For example, filenames like "test/data/pi.txt" are relative to this root
|
||||
directory.
|
||||
Reference in New Issue
Block a user