Skip to content

Commit 6e27b27

Browse files
committed
libstd: Move std tests into libstd
1 parent 17bf4b0 commit 6e27b27

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+2926
-3032
lines changed

Diff for: mk/tests.mk

+1-5
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,6 @@ ifdef VERBOSE
5555
CTEST_TESTARGS += --verbose
5656
endif
5757

58-
# The standard library test crate
59-
STDTEST_CRATE := $(S)src/test/stdtest/stdtest.rc
60-
STDTEST_INPUTS := $(wildcard $(S)src/test/stdtest/*rs)
61-
6258
# Run the compiletest runner itself under valgrind
6359
ifdef CTEST_VALGRIND
6460
CFG_RUN_CTEST=$(call CFG_RUN_TEST,$(2),$(3))
@@ -188,7 +184,7 @@ check-stage$(1)-T-$(2)-H-$(3)-core-dummy: \
188184
# Rules for the standard library test runner
189185

190186
$(3)/test/stdtest.stage$(1)-$(2)$$(X): \
191-
$$(STDTEST_CRATE) $$(STDTEST_INPUTS) \
187+
$$(STDLIB_CRATE) $$(STDLIB_INPUTS) \
192188
$$(SREQ$(1)_T_$(2)_H_$(3))
193189
@$$(call E, compile_and_link: $$@)
194190
$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test

Diff for: src/libstd/bitv.rs

+285
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,291 @@ fn eq_vec(v0: t, v1: [uint]) -> bool {
305305
ret true;
306306
}
307307

308+
#[cfg(test)]
309+
mod tests {
310+
#[test]
311+
fn test_0_elements() {
312+
let act;
313+
let exp;
314+
act = create(0u, false);
315+
exp = vec::init_elt::<uint>(0u, 0u);
316+
assert (eq_vec(act, exp));
317+
}
318+
319+
#[test]
320+
fn test_1_element() {
321+
let act;
322+
act = create(1u, false);
323+
assert (eq_vec(act, [0u]));
324+
act = create(1u, true);
325+
assert (eq_vec(act, [1u]));
326+
}
327+
328+
#[test]
329+
fn test_10_elements() {
330+
let act;
331+
// all 0
332+
333+
act = create(10u, false);
334+
assert (eq_vec(act, [0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u]));
335+
// all 1
336+
337+
act = create(10u, true);
338+
assert (eq_vec(act, [1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u]));
339+
// mixed
340+
341+
act = create(10u, false);
342+
set(act, 0u, true);
343+
set(act, 1u, true);
344+
set(act, 2u, true);
345+
set(act, 3u, true);
346+
set(act, 4u, true);
347+
assert (eq_vec(act, [1u, 1u, 1u, 1u, 1u, 0u, 0u, 0u, 0u, 0u]));
348+
// mixed
349+
350+
act = create(10u, false);
351+
set(act, 5u, true);
352+
set(act, 6u, true);
353+
set(act, 7u, true);
354+
set(act, 8u, true);
355+
set(act, 9u, true);
356+
assert (eq_vec(act, [0u, 0u, 0u, 0u, 0u, 1u, 1u, 1u, 1u, 1u]));
357+
// mixed
358+
359+
act = create(10u, false);
360+
set(act, 0u, true);
361+
set(act, 3u, true);
362+
set(act, 6u, true);
363+
set(act, 9u, true);
364+
assert (eq_vec(act, [1u, 0u, 0u, 1u, 0u, 0u, 1u, 0u, 0u, 1u]));
365+
}
366+
367+
#[test]
368+
fn test_31_elements() {
369+
let act;
370+
// all 0
371+
372+
act = create(31u, false);
373+
assert (eq_vec(act,
374+
[0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
375+
0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
376+
0u, 0u, 0u, 0u, 0u]));
377+
// all 1
378+
379+
act = create(31u, true);
380+
assert (eq_vec(act,
381+
[1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
382+
1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
383+
1u, 1u, 1u, 1u, 1u]));
384+
// mixed
385+
386+
act = create(31u, false);
387+
set(act, 0u, true);
388+
set(act, 1u, true);
389+
set(act, 2u, true);
390+
set(act, 3u, true);
391+
set(act, 4u, true);
392+
set(act, 5u, true);
393+
set(act, 6u, true);
394+
set(act, 7u, true);
395+
assert (eq_vec(act,
396+
[1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 0u, 0u, 0u, 0u, 0u,
397+
0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
398+
0u, 0u, 0u, 0u, 0u]));
399+
// mixed
400+
401+
act = create(31u, false);
402+
set(act, 16u, true);
403+
set(act, 17u, true);
404+
set(act, 18u, true);
405+
set(act, 19u, true);
406+
set(act, 20u, true);
407+
set(act, 21u, true);
408+
set(act, 22u, true);
409+
set(act, 23u, true);
410+
assert (eq_vec(act,
411+
[0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
412+
0u, 0u, 0u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 0u, 0u,
413+
0u, 0u, 0u, 0u, 0u]));
414+
// mixed
415+
416+
act = create(31u, false);
417+
set(act, 24u, true);
418+
set(act, 25u, true);
419+
set(act, 26u, true);
420+
set(act, 27u, true);
421+
set(act, 28u, true);
422+
set(act, 29u, true);
423+
set(act, 30u, true);
424+
assert (eq_vec(act,
425+
[0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
426+
0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 1u, 1u,
427+
1u, 1u, 1u, 1u, 1u]));
428+
// mixed
429+
430+
act = create(31u, false);
431+
set(act, 3u, true);
432+
set(act, 17u, true);
433+
set(act, 30u, true);
434+
assert (eq_vec(act,
435+
[0u, 0u, 0u, 1u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
436+
0u, 0u, 0u, 0u, 1u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
437+
0u, 0u, 0u, 0u, 1u]));
438+
}
439+
440+
#[test]
441+
fn test_32_elements() {
442+
let act;
443+
// all 0
444+
445+
act = create(32u, false);
446+
assert (eq_vec(act,
447+
[0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
448+
0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
449+
0u, 0u, 0u, 0u, 0u, 0u]));
450+
// all 1
451+
452+
act = create(32u, true);
453+
assert (eq_vec(act,
454+
[1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
455+
1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
456+
1u, 1u, 1u, 1u, 1u, 1u]));
457+
// mixed
458+
459+
act = create(32u, false);
460+
set(act, 0u, true);
461+
set(act, 1u, true);
462+
set(act, 2u, true);
463+
set(act, 3u, true);
464+
set(act, 4u, true);
465+
set(act, 5u, true);
466+
set(act, 6u, true);
467+
set(act, 7u, true);
468+
assert (eq_vec(act,
469+
[1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 0u, 0u, 0u, 0u, 0u,
470+
0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
471+
0u, 0u, 0u, 0u, 0u, 0u]));
472+
// mixed
473+
474+
act = create(32u, false);
475+
set(act, 16u, true);
476+
set(act, 17u, true);
477+
set(act, 18u, true);
478+
set(act, 19u, true);
479+
set(act, 20u, true);
480+
set(act, 21u, true);
481+
set(act, 22u, true);
482+
set(act, 23u, true);
483+
assert (eq_vec(act,
484+
[0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
485+
0u, 0u, 0u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 0u, 0u,
486+
0u, 0u, 0u, 0u, 0u, 0u]));
487+
// mixed
488+
489+
act = create(32u, false);
490+
set(act, 24u, true);
491+
set(act, 25u, true);
492+
set(act, 26u, true);
493+
set(act, 27u, true);
494+
set(act, 28u, true);
495+
set(act, 29u, true);
496+
set(act, 30u, true);
497+
set(act, 31u, true);
498+
assert (eq_vec(act,
499+
[0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
500+
0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 1u, 1u,
501+
1u, 1u, 1u, 1u, 1u, 1u]));
502+
// mixed
503+
504+
act = create(32u, false);
505+
set(act, 3u, true);
506+
set(act, 17u, true);
507+
set(act, 30u, true);
508+
set(act, 31u, true);
509+
assert (eq_vec(act,
510+
[0u, 0u, 0u, 1u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
511+
0u, 0u, 0u, 0u, 1u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
512+
0u, 0u, 0u, 0u, 1u, 1u]));
513+
}
514+
515+
#[test]
516+
fn test_33_elements() {
517+
let act;
518+
// all 0
519+
520+
act = create(33u, false);
521+
assert (eq_vec(act,
522+
[0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
523+
0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
524+
0u, 0u, 0u, 0u, 0u, 0u, 0u]));
525+
// all 1
526+
527+
act = create(33u, true);
528+
assert (eq_vec(act,
529+
[1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
530+
1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
531+
1u, 1u, 1u, 1u, 1u, 1u, 1u]));
532+
// mixed
533+
534+
act = create(33u, false);
535+
set(act, 0u, true);
536+
set(act, 1u, true);
537+
set(act, 2u, true);
538+
set(act, 3u, true);
539+
set(act, 4u, true);
540+
set(act, 5u, true);
541+
set(act, 6u, true);
542+
set(act, 7u, true);
543+
assert (eq_vec(act,
544+
[1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 0u, 0u, 0u, 0u, 0u,
545+
0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
546+
0u, 0u, 0u, 0u, 0u, 0u, 0u]));
547+
// mixed
548+
549+
act = create(33u, false);
550+
set(act, 16u, true);
551+
set(act, 17u, true);
552+
set(act, 18u, true);
553+
set(act, 19u, true);
554+
set(act, 20u, true);
555+
set(act, 21u, true);
556+
set(act, 22u, true);
557+
set(act, 23u, true);
558+
assert (eq_vec(act,
559+
[0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
560+
0u, 0u, 0u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 0u, 0u,
561+
0u, 0u, 0u, 0u, 0u, 0u, 0u]));
562+
// mixed
563+
564+
act = create(33u, false);
565+
set(act, 24u, true);
566+
set(act, 25u, true);
567+
set(act, 26u, true);
568+
set(act, 27u, true);
569+
set(act, 28u, true);
570+
set(act, 29u, true);
571+
set(act, 30u, true);
572+
set(act, 31u, true);
573+
assert (eq_vec(act,
574+
[0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
575+
0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 1u, 1u,
576+
1u, 1u, 1u, 1u, 1u, 1u, 0u]));
577+
// mixed
578+
579+
act = create(33u, false);
580+
set(act, 3u, true);
581+
set(act, 17u, true);
582+
set(act, 30u, true);
583+
set(act, 31u, true);
584+
set(act, 32u, true);
585+
assert (eq_vec(act,
586+
[0u, 0u, 0u, 1u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
587+
0u, 0u, 0u, 0u, 1u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u,
588+
0u, 0u, 0u, 0u, 1u, 1u, 1u]));
589+
}
590+
591+
}
592+
308593
//
309594
// Local Variables:
310595
// mode: rust

Diff for: src/libstd/c_vec.rs

+61
Original file line numberDiff line numberDiff line change
@@ -148,3 +148,64 @@ Returns a pointer to the first element of the vector
148148
unsafe fn ptr<T>(t: t<T>) -> *mutable T {
149149
ret (*t).base;
150150
}
151+
152+
#[cfg(test)]
153+
mod tests {
154+
import ctypes::*;
155+
156+
#[nolink]
157+
#[abi = "cdecl"]
158+
native mod libc {
159+
fn malloc(n: size_t) -> *mutable u8;
160+
fn free(m: *mutable u8);
161+
}
162+
163+
fn malloc(n: size_t) -> t<u8> {
164+
let mem = libc::malloc(n);
165+
166+
assert mem as int != 0;
167+
168+
ret unsafe { create_with_dtor(mem, n, bind libc::free(mem)) };
169+
}
170+
171+
#[test]
172+
fn test_basic() {
173+
let cv = malloc(16u);
174+
175+
set(cv, 3u, 8u8);
176+
set(cv, 4u, 9u8);
177+
assert get(cv, 3u) == 8u8;
178+
assert get(cv, 4u) == 9u8;
179+
assert len(cv) == 16u;
180+
}
181+
182+
#[test]
183+
#[should_fail]
184+
#[ignore(cfg(target_os = "win32"))]
185+
fn test_overrun_get() {
186+
let cv = malloc(16u);
187+
188+
get(cv, 17u);
189+
}
190+
191+
#[test]
192+
#[should_fail]
193+
#[ignore(cfg(target_os = "win32"))]
194+
fn test_overrun_set() {
195+
let cv = malloc(16u);
196+
197+
set(cv, 17u, 0u8);
198+
}
199+
200+
#[test]
201+
fn test_and_I_mean_it() {
202+
let cv = malloc(16u);
203+
let p = unsafe { ptr(cv) };
204+
205+
set(cv, 0u, 32u8);
206+
set(cv, 1u, 33u8);
207+
assert unsafe { *p } == 32u8;
208+
set(cv, 2u, 34u8); /* safety */
209+
}
210+
211+
}

0 commit comments

Comments
 (0)