Let test binaries run from any dir in the repo

Also spin out generate.WuffsRoot into its own package.
This commit is contained in:
Nigel Tao
2018-11-03 08:46:31 +11:00
parent e2d1f8e0c2
commit 3854ce3e89
13 changed files with 208 additions and 147 deletions

View File

@@ -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 {

View File

@@ -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
}

View File

@@ -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")
}

View 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")
}

View File

@@ -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,
},
};

View File

@@ -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,
},
};

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
View 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.