mirror of
https://github.com/rust-lang/rust
synced 2024-10-04 15:50:51 +00:00
Get unit tests for rusti working
* They didn't work before, because the location of the tests caused the 'sysroot' option to crate lookup to be wrong for finding the correct stage's core/std libraries. This moves the compiled tests from the $host/test directory into a $host/$stage/test directory. This means that the sysroot will be correct and the core/std libraries can actually be found * The LLVM bindings apparently aren't threadsafe, so we can't run multiple tests in parallel.
This commit is contained in:
parent
767e3ae86c
commit
54f2147e8e
3
configure
vendored
3
configure
vendored
|
@ -695,6 +695,9 @@ do
|
||||||
# host lib dir
|
# host lib dir
|
||||||
make_dir $h/stage$i/$CFG_LIBDIR
|
make_dir $h/stage$i/$CFG_LIBDIR
|
||||||
|
|
||||||
|
# host test dir
|
||||||
|
make_dir $h/stage$i/test
|
||||||
|
|
||||||
# target bin dir
|
# target bin dir
|
||||||
make_dir $h/stage$i/$CFG_LIBDIR/rustc/$t/bin
|
make_dir $h/stage$i/$CFG_LIBDIR/rustc/$t/bin
|
||||||
|
|
||||||
|
|
22
mk/tests.mk
22
mk/tests.mk
|
@ -289,50 +289,50 @@ else
|
||||||
STDTESTDEP_$(1)_$(2)_$(3) =
|
STDTESTDEP_$(1)_$(2)_$(3) =
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(3)/test/coretest.stage$(1)-$(2)$$(X_$(2)): \
|
$(3)/stage$(1)/test/coretest-$(2)$$(X_$(2)): \
|
||||||
$$(CORELIB_CRATE) $$(CORELIB_INPUTS) \
|
$$(CORELIB_CRATE) $$(CORELIB_INPUTS) \
|
||||||
$$(STDTESTDEP_$(1)_$(2)_$(3))
|
$$(STDTESTDEP_$(1)_$(2)_$(3))
|
||||||
@$$(call E, compile_and_link: $$@)
|
@$$(call E, compile_and_link: $$@)
|
||||||
$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
|
$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
|
||||||
|
|
||||||
$(3)/test/stdtest.stage$(1)-$(2)$$(X_$(2)): \
|
$(3)/stage$(1)/test/stdtest-$(2)$$(X_$(2)): \
|
||||||
$$(STDLIB_CRATE) $$(STDLIB_INPUTS) \
|
$$(STDLIB_CRATE) $$(STDLIB_INPUTS) \
|
||||||
$$(STDTESTDEP_$(1)_$(2)_$(3))
|
$$(STDTESTDEP_$(1)_$(2)_$(3))
|
||||||
@$$(call E, compile_and_link: $$@)
|
@$$(call E, compile_and_link: $$@)
|
||||||
$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
|
$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
|
||||||
|
|
||||||
$(3)/test/syntaxtest.stage$(1)-$(2)$$(X_$(2)): \
|
$(3)/stage$(1)/test/syntaxtest-$(2)$$(X_$(2)): \
|
||||||
$$(LIBSYNTAX_CRATE) $$(LIBSYNTAX_INPUTS) \
|
$$(LIBSYNTAX_CRATE) $$(LIBSYNTAX_INPUTS) \
|
||||||
$$(STDTESTDEP_$(1)_$(2)_$(3))
|
$$(STDTESTDEP_$(1)_$(2)_$(3))
|
||||||
@$$(call E, compile_and_link: $$@)
|
@$$(call E, compile_and_link: $$@)
|
||||||
$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
|
$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
|
||||||
|
|
||||||
$(3)/test/rustctest.stage$(1)-$(2)$$(X_$(2)): \
|
$(3)/stage$(1)/test/rustctest-$(2)$$(X_$(2)): \
|
||||||
$$(COMPILER_CRATE) $$(COMPILER_INPUTS) \
|
$$(COMPILER_CRATE) $$(COMPILER_INPUTS) \
|
||||||
$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_RUSTLLVM_$(2)) \
|
$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_RUSTLLVM_$(2)) \
|
||||||
$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBSYNTAX_$(2))
|
$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBSYNTAX_$(2))
|
||||||
@$$(call E, compile_and_link: $$@)
|
@$$(call E, compile_and_link: $$@)
|
||||||
$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
|
$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
|
||||||
|
|
||||||
$(3)/test/rustpkgtest.stage$(1)-$(2)$$(X_$(2)): \
|
$(3)/stage$(1)/test/rustpkgtest-$(2)$$(X_$(2)): \
|
||||||
$$(RUSTPKG_LIB) $$(RUSTPKG_INPUTS) \
|
$$(RUSTPKG_LIB) $$(RUSTPKG_INPUTS) \
|
||||||
$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC_$(2))
|
$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC_$(2))
|
||||||
@$$(call E, compile_and_link: $$@)
|
@$$(call E, compile_and_link: $$@)
|
||||||
$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
|
$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
|
||||||
|
|
||||||
$(3)/test/rustitest.stage$(1)-$(2)$$(X_$(2)): \
|
$(3)/stage$(1)/test/rustitest-$(2)$$(X_$(2)): \
|
||||||
$$(RUSTI_LIB) $$(RUSTI_INPUTS) \
|
$$(RUSTI_LIB) $$(RUSTI_INPUTS) \
|
||||||
$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC_$(2))
|
$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC_$(2))
|
||||||
@$$(call E, compile_and_link: $$@)
|
@$$(call E, compile_and_link: $$@)
|
||||||
$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
|
$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
|
||||||
|
|
||||||
$(3)/test/rusttest.stage$(1)-$(2)$$(X_$(2)): \
|
$(3)/stage$(1)/test/rusttest-$(2)$$(X_$(2)): \
|
||||||
$$(RUST_LIB) $$(RUST_INPUTS) \
|
$$(RUST_LIB) $$(RUST_INPUTS) \
|
||||||
$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC_$(2))
|
$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC_$(2))
|
||||||
@$$(call E, compile_and_link: $$@)
|
@$$(call E, compile_and_link: $$@)
|
||||||
$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
|
$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
|
||||||
|
|
||||||
$(3)/test/rustdoctest.stage$(1)-$(2)$$(X_$(2)): \
|
$(3)/stage$(1)/test/rustdoctest-$(2)$$(X_$(2)): \
|
||||||
$$(RUSTDOC_LIB) $$(RUSTDOC_INPUTS) \
|
$$(RUSTDOC_LIB) $$(RUSTDOC_INPUTS) \
|
||||||
$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC_$(2))
|
$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC_$(2))
|
||||||
@$$(call E, compile_and_link: $$@)
|
@$$(call E, compile_and_link: $$@)
|
||||||
|
@ -349,7 +349,7 @@ define DEF_TEST_CRATE_RULES
|
||||||
check-stage$(1)-T-$(2)-H-$(3)-$(4)-exec: $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4))
|
check-stage$(1)-T-$(2)-H-$(3)-$(4)-exec: $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4))
|
||||||
|
|
||||||
$$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \
|
$$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \
|
||||||
$(3)/test/$(4)test.stage$(1)-$(2)$$(X_$(2))
|
$(3)/stage$(1)/test/$(4)test-$(2)$$(X_$(2))
|
||||||
@$$(call E, run: $$<)
|
@$$(call E, run: $$<)
|
||||||
$$(Q)$$(call CFG_RUN_TEST_$(2),$$<,$(2),$(3)) $$(TESTARGS) \
|
$$(Q)$$(call CFG_RUN_TEST_$(2),$$<,$(2),$(3)) $$(TESTARGS) \
|
||||||
--logfile $$(call TEST_LOG_FILE,$(1),$(2),$(3),$(4)) \
|
--logfile $$(call TEST_LOG_FILE,$(1),$(2),$(3),$(4)) \
|
||||||
|
@ -360,7 +360,7 @@ define DEF_TEST_CRATE_RULES_arm-linux-androideabi
|
||||||
check-stage$(1)-T-$(2)-H-$(3)-$(4)-exec: $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4))
|
check-stage$(1)-T-$(2)-H-$(3)-$(4)-exec: $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4))
|
||||||
|
|
||||||
$$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \
|
$$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \
|
||||||
$(3)/test/$(4)test.stage$(1)-$(2)$$(X_$(2))
|
$(3)/stage$(1)/test/$(4)test-$(2)$$(X_$(2))
|
||||||
@$$(call E, run: $$< via adb)
|
@$$(call E, run: $$< via adb)
|
||||||
@$(CFG_ADB) push $$< $(CFG_ADB_TEST_DIR)
|
@$(CFG_ADB) push $$< $(CFG_ADB_TEST_DIR)
|
||||||
@$(CFG_ADB) shell LD_LIBRARY_PATH=$(CFG_ADB_TEST_DIR) \
|
@$(CFG_ADB) shell LD_LIBRARY_PATH=$(CFG_ADB_TEST_DIR) \
|
||||||
|
@ -385,7 +385,7 @@ define DEF_TEST_CRATE_RULES_null
|
||||||
check-stage$(1)-T-$(2)-H-$(3)-$(4)-exec: $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4))
|
check-stage$(1)-T-$(2)-H-$(3)-$(4)-exec: $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4))
|
||||||
|
|
||||||
$$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \
|
$$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \
|
||||||
$(3)/test/$(4)test.stage$(1)-$(2)$$(X_$(2))
|
$(3)/stage$(1)/test/$(4)test-$(2)$$(X_$(2))
|
||||||
@$$(call E, run: skipped $$< )
|
@$$(call E, run: skipped $$< )
|
||||||
@touch $$@
|
@touch $$@
|
||||||
endef
|
endef
|
||||||
|
|
|
@ -35,7 +35,7 @@ use std::rl;
|
||||||
* A structure shared across REPL instances for storing history
|
* A structure shared across REPL instances for storing history
|
||||||
* such as statements and view items. I wish the AST was sendable.
|
* such as statements and view items. I wish the AST was sendable.
|
||||||
*/
|
*/
|
||||||
struct Repl {
|
pub struct Repl {
|
||||||
prompt: ~str,
|
prompt: ~str,
|
||||||
binary: ~str,
|
binary: ~str,
|
||||||
running: bool,
|
running: bool,
|
||||||
|
@ -328,8 +328,8 @@ fn run_cmd(repl: &mut Repl, _in: @io::Reader, _out: @io::Writer,
|
||||||
|
|
||||||
/// Executes a line of input, which may either be rust code or a
|
/// Executes a line of input, which may either be rust code or a
|
||||||
/// :command. Returns a new Repl if it has changed.
|
/// :command. Returns a new Repl if it has changed.
|
||||||
fn run_line(repl: &mut Repl, in: @io::Reader, out: @io::Writer, line: ~str,
|
pub fn run_line(repl: &mut Repl, in: @io::Reader, out: @io::Writer, line: ~str,
|
||||||
use_rl: bool)
|
use_rl: bool)
|
||||||
-> Option<Repl> {
|
-> Option<Repl> {
|
||||||
if line.starts_with(":") {
|
if line.starts_with(":") {
|
||||||
let full = line.substr(1, line.len() - 1);
|
let full = line.substr(1, line.len() - 1);
|
||||||
|
@ -421,3 +421,50 @@ pub fn main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
fn repl() -> Repl {
|
||||||
|
Repl {
|
||||||
|
prompt: ~"rusti> ",
|
||||||
|
binary: ~"rusti",
|
||||||
|
running: true,
|
||||||
|
view_items: ~"",
|
||||||
|
lib_search_paths: ~[],
|
||||||
|
stmts: ~""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn super_simple() {
|
||||||
|
let mut r = repl();
|
||||||
|
let result = run_line(&mut r, io::stdin(), io::stdout(), ~"", false);
|
||||||
|
result.expect("empty input shouldn't fail in rusti");
|
||||||
|
}
|
||||||
|
|
||||||
|
fn use_does_not_crash() {
|
||||||
|
let mut r = repl();
|
||||||
|
let result = run_line(&mut r, io::stdin(), io::stdout(),
|
||||||
|
~"use core::util::with;", false);
|
||||||
|
r = result.expect("use statements should't fail in rusti");
|
||||||
|
let result = run_line(&mut r, io::stdin(), io::stdout(),
|
||||||
|
~"", false);
|
||||||
|
result.expect("something should be able to happen after a use statement");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn run_all() {
|
||||||
|
// By default, unit tests are run in parallel. Rusti, on the other hand,
|
||||||
|
// does not enjoy doing this. I suspect that it is because the LLVM
|
||||||
|
// bindings are not thread-safe (when running parallel tests, some tests
|
||||||
|
// were triggering assertions in LLVM (or segfaults). Hence, this
|
||||||
|
// function exists to run everything serially (sadface).
|
||||||
|
//
|
||||||
|
// To get some interesting output, run with RUST_LOG=rusti::tests
|
||||||
|
|
||||||
|
debug!("super_simple"); super_simple();
|
||||||
|
debug!("use_does_not_crash"); use_does_not_crash();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue