summaryrefslogtreecommitdiffstats
path: root/pintos-progos/tests/intro
diff options
context:
space:
mode:
authormanuel <manuel@mausz.at>2012-03-26 12:54:45 +0200
committermanuel <manuel@mausz.at>2012-03-26 12:54:45 +0200
commitb5f0874cd96ee2a62aabc645b9626c2749cb6a01 (patch)
tree1262e4bbe0634de6650be130c36e0538240f4cbf /pintos-progos/tests/intro
downloadprogos-b5f0874cd96ee2a62aabc645b9626c2749cb6a01.tar.gz
progos-b5f0874cd96ee2a62aabc645b9626c2749cb6a01.tar.bz2
progos-b5f0874cd96ee2a62aabc645b9626c2749cb6a01.zip
initial pintos checkin
Diffstat (limited to 'pintos-progos/tests/intro')
-rw-r--r--pintos-progos/tests/intro/Grading5
-rw-r--r--pintos-progos/tests/intro/alarm-clock/Make.tests15
-rw-r--r--pintos-progos/tests/intro/alarm-clock/Rubric7
l---------pintos-progos/tests/intro/alarm-clock/alarm-multiple.ck1
l---------pintos-progos/tests/intro/alarm-clock/alarm-negative.c1
l---------pintos-progos/tests/intro/alarm-clock/alarm-negative.ck1
l---------pintos-progos/tests/intro/alarm-clock/alarm-simultaneous.c1
l---------pintos-progos/tests/intro/alarm-clock/alarm-simultaneous.ck1
l---------pintos-progos/tests/intro/alarm-clock/alarm-single.ck1
l---------pintos-progos/tests/intro/alarm-clock/alarm-wait.c1
l---------pintos-progos/tests/intro/alarm-clock/alarm-zero.c1
l---------pintos-progos/tests/intro/alarm-clock/alarm-zero.ck1
-rw-r--r--pintos-progos/tests/intro/alarm-clock/tests.c80
-rw-r--r--pintos-progos/tests/intro/userprog-args/Make.tests27
-rw-r--r--pintos-progos/tests/intro/userprog-args/Rubric7
l---------pintos-progos/tests/intro/userprog-args/args-dbl-space.ck1
-rw-r--r--pintos-progos/tests/intro/userprog-args/args-limit.c70
-rw-r--r--pintos-progos/tests/intro/userprog-args/args-limit.ck11
l---------pintos-progos/tests/intro/userprog-args/args-many.ck1
l---------pintos-progos/tests/intro/userprog-args/args-multiple.ck1
l---------pintos-progos/tests/intro/userprog-args/args-none.ck1
l---------pintos-progos/tests/intro/userprog-args/args-single.ck1
l---------pintos-progos/tests/intro/userprog-args/args.c1
l---------pintos-progos/tests/intro/userprog-args/child-simple.c1
24 files changed, 238 insertions, 0 deletions
diff --git a/pintos-progos/tests/intro/Grading b/pintos-progos/tests/intro/Grading
new file mode 100644
index 0000000..b1ff6b8
--- /dev/null
+++ b/pintos-progos/tests/intro/Grading
@@ -0,0 +1,5 @@
1# Percentage of the testing point total designated for each set of
2# tests.
3
450.0% tests/intro/alarm-clock/Rubric
550.0% tests/intro/userprog-args/Rubric
diff --git a/pintos-progos/tests/intro/alarm-clock/Make.tests b/pintos-progos/tests/intro/alarm-clock/Make.tests
new file mode 100644
index 0000000..55ad443
--- /dev/null
+++ b/pintos-progos/tests/intro/alarm-clock/Make.tests
@@ -0,0 +1,15 @@
1# -*- makefile -*-
2tests/intro/alarm-clock/%.output: SIMULATOR = bochs
3tests/intro/alarm-clock/%.output: PINTOSOPTS += --kernel-test
4tests/intro/alarm-clock/%.output: FILESYSSOURCE = --filesys-size=1
5
6# Test names.
7tests/intro/alarm-clock_TESTS = $(addprefix tests/intro/alarm-clock/,alarm-single \
8alarm-multiple alarm-simultaneous alarm-zero alarm-negative)
9
10# Sources for tests.
11tests/intro/alarm-clock_SRC = tests/intro/alarm-clock/tests.c
12tests/intro/alarm-clock_SRC += tests/intro/alarm-clock/alarm-wait.c
13tests/intro/alarm-clock_SRC += tests/intro/alarm-clock/alarm-simultaneous.c
14tests/intro/alarm-clock_SRC += tests/intro/alarm-clock/alarm-zero.c
15tests/intro/alarm-clock_SRC += tests/intro/alarm-clock/alarm-negative.c
diff --git a/pintos-progos/tests/intro/alarm-clock/Rubric b/pintos-progos/tests/intro/alarm-clock/Rubric
new file mode 100644
index 0000000..0cf3dc1
--- /dev/null
+++ b/pintos-progos/tests/intro/alarm-clock/Rubric
@@ -0,0 +1,7 @@
1Functionality and robustness of alarm clock:
24 alarm-single
34 alarm-multiple
44 alarm-simultaneous
51 alarm-zero
61 alarm-negative
7
diff --git a/pintos-progos/tests/intro/alarm-clock/alarm-multiple.ck b/pintos-progos/tests/intro/alarm-clock/alarm-multiple.ck
new file mode 120000
index 0000000..f3a9edc
--- /dev/null
+++ b/pintos-progos/tests/intro/alarm-clock/alarm-multiple.ck
@@ -0,0 +1 @@
../../threads/alarm-multiple.ck \ No newline at end of file
diff --git a/pintos-progos/tests/intro/alarm-clock/alarm-negative.c b/pintos-progos/tests/intro/alarm-clock/alarm-negative.c
new file mode 120000
index 0000000..483aa63
--- /dev/null
+++ b/pintos-progos/tests/intro/alarm-clock/alarm-negative.c
@@ -0,0 +1 @@
../../threads/alarm-negative.c \ No newline at end of file
diff --git a/pintos-progos/tests/intro/alarm-clock/alarm-negative.ck b/pintos-progos/tests/intro/alarm-clock/alarm-negative.ck
new file mode 120000
index 0000000..279520e
--- /dev/null
+++ b/pintos-progos/tests/intro/alarm-clock/alarm-negative.ck
@@ -0,0 +1 @@
../../threads/alarm-negative.ck \ No newline at end of file
diff --git a/pintos-progos/tests/intro/alarm-clock/alarm-simultaneous.c b/pintos-progos/tests/intro/alarm-clock/alarm-simultaneous.c
new file mode 120000
index 0000000..6362b61
--- /dev/null
+++ b/pintos-progos/tests/intro/alarm-clock/alarm-simultaneous.c
@@ -0,0 +1 @@
../../threads/alarm-simultaneous.c \ No newline at end of file
diff --git a/pintos-progos/tests/intro/alarm-clock/alarm-simultaneous.ck b/pintos-progos/tests/intro/alarm-clock/alarm-simultaneous.ck
new file mode 120000
index 0000000..7226d0c
--- /dev/null
+++ b/pintos-progos/tests/intro/alarm-clock/alarm-simultaneous.ck
@@ -0,0 +1 @@
../../threads/alarm-simultaneous.ck \ No newline at end of file
diff --git a/pintos-progos/tests/intro/alarm-clock/alarm-single.ck b/pintos-progos/tests/intro/alarm-clock/alarm-single.ck
new file mode 120000
index 0000000..7f98a51
--- /dev/null
+++ b/pintos-progos/tests/intro/alarm-clock/alarm-single.ck
@@ -0,0 +1 @@
../../threads/alarm-single.ck \ No newline at end of file
diff --git a/pintos-progos/tests/intro/alarm-clock/alarm-wait.c b/pintos-progos/tests/intro/alarm-clock/alarm-wait.c
new file mode 120000
index 0000000..2755ae5
--- /dev/null
+++ b/pintos-progos/tests/intro/alarm-clock/alarm-wait.c
@@ -0,0 +1 @@
../../threads/alarm-wait.c \ No newline at end of file
diff --git a/pintos-progos/tests/intro/alarm-clock/alarm-zero.c b/pintos-progos/tests/intro/alarm-clock/alarm-zero.c
new file mode 120000
index 0000000..a1f3ca7
--- /dev/null
+++ b/pintos-progos/tests/intro/alarm-clock/alarm-zero.c
@@ -0,0 +1 @@
../../threads/alarm-zero.c \ No newline at end of file
diff --git a/pintos-progos/tests/intro/alarm-clock/alarm-zero.ck b/pintos-progos/tests/intro/alarm-clock/alarm-zero.ck
new file mode 120000
index 0000000..3f98d64
--- /dev/null
+++ b/pintos-progos/tests/intro/alarm-clock/alarm-zero.ck
@@ -0,0 +1 @@
../../threads/alarm-zero.ck \ No newline at end of file
diff --git a/pintos-progos/tests/intro/alarm-clock/tests.c b/pintos-progos/tests/intro/alarm-clock/tests.c
new file mode 100644
index 0000000..4a96360
--- /dev/null
+++ b/pintos-progos/tests/intro/alarm-clock/tests.c
@@ -0,0 +1,80 @@
1#include "tests/threads/tests.h"
2#include <debug.h>
3#include <string.h>
4#include <stdio.h>
5
6struct test
7 {
8 const char *name;
9 test_func *function;
10 };
11
12static const struct test tests[] =
13 {
14 {"alarm-single", test_alarm_single},
15 {"alarm-multiple", test_alarm_multiple},
16 {"alarm-simultaneous", test_alarm_simultaneous},
17 {"alarm-zero", test_alarm_zero},
18 {"alarm-negative", test_alarm_negative},
19 };
20
21static const char *test_name;
22
23/* Runs the test named NAME. */
24void
25run_test (const char *name)
26{
27 const struct test *t;
28
29 for (t = tests; t < tests + sizeof tests / sizeof *tests; t++)
30 if (!strcmp (name, t->name))
31 {
32 test_name = name;
33 msg ("begin");
34 t->function ();
35 msg ("end");
36 return;
37 }
38 PANIC ("no test named \"%s\"", name);
39}
40
41/* Prints FORMAT as if with printf(),
42 prefixing the output by the name of the test
43 and following it with a new-line character. */
44void
45msg (const char *format, ...)
46{
47 va_list args;
48
49 printf ("(%s) ", test_name);
50 va_start (args, format);
51 vprintf (format, args);
52 va_end (args);
53 putchar ('\n');
54}
55
56/* Prints failure message FORMAT as if with printf(),
57 prefixing the output by the name of the test and FAIL:
58 and following it with a new-line character,
59 and then panics the kernel. */
60void
61fail (const char *format, ...)
62{
63 va_list args;
64
65 printf ("(%s) FAIL: ", test_name);
66 va_start (args, format);
67 vprintf (format, args);
68 va_end (args);
69 putchar ('\n');
70
71 PANIC ("test failed");
72}
73
74/* Prints a message indicating the current test passed. */
75void
76pass (void)
77{
78 printf ("(%s) PASS\n", test_name);
79}
80
diff --git a/pintos-progos/tests/intro/userprog-args/Make.tests b/pintos-progos/tests/intro/userprog-args/Make.tests
new file mode 100644
index 0000000..6f7a474
--- /dev/null
+++ b/pintos-progos/tests/intro/userprog-args/Make.tests
@@ -0,0 +1,27 @@
1# -*- makefile -*-
2
3tests/intro/userprog-args/%.output: FILESYSSOURCE = --filesys-size=2
4tests/intro/userprog-args/%.output: PUTFILES = $(filter-out kernel.bin loader.bin, $^)
5tests/intro/userprog-args/%.output: SIMULATOR = --qemu
6tests/intro/userprog-args_TESTS = $(addprefix tests/intro/userprog-args/,args-none \
7args-single args-multiple args-many args-dbl-space args-limit)
8
9tests/intro/userprog-args_PROGS = $(tests/intro/userprog-args_TESTS) $(addprefix \
10tests/intro/userprog-args/,child-simple child-args)
11
12tests/intro/userprog-args/args-none_SRC = tests/intro/userprog-args/args.c
13tests/intro/userprog-args/args-single_SRC = tests/intro/userprog-args/args.c
14tests/intro/userprog-args/args-multiple_SRC = tests/intro/userprog-args/args.c
15tests/intro/userprog-args/args-many_SRC = tests/intro/userprog-args/args.c
16tests/intro/userprog-args/args-dbl-space_SRC = tests/intro/userprog-args/args.c
17tests/intro/userprog-args/args-limit_SRC = tests/intro/userprog-args/args-limit.c
18
19tests/intro/userprog-args/child-simple_SRC = tests/intro/userprog-args/child-simple.c
20tests/intro/userprog-args/child-args_SRC = tests/intro/userprog-args/args.c
21
22$(foreach prog,$(tests/intro/userprog-args_PROGS),$(eval $(prog)_SRC += tests/lib.c))
23
24tests/intro/userprog-args/args-single_ARGS = onearg
25tests/intro/userprog-args/args-multiple_ARGS = some arguments for you!
26tests/intro/userprog-args/args-many_ARGS = a b c d e f g h i j k l m n o p q r s t u v
27tests/intro/userprog-args/args-dbl-space_ARGS = two spaces!
diff --git a/pintos-progos/tests/intro/userprog-args/Rubric b/pintos-progos/tests/intro/userprog-args/Rubric
new file mode 100644
index 0000000..f5474c5
--- /dev/null
+++ b/pintos-progos/tests/intro/userprog-args/Rubric
@@ -0,0 +1,7 @@
1Functionality of stack setup:
23 args-none
33 args-single
43 args-multiple
53 args-many
63 args-dbl-space
73 args-limit
diff --git a/pintos-progos/tests/intro/userprog-args/args-dbl-space.ck b/pintos-progos/tests/intro/userprog-args/args-dbl-space.ck
new file mode 120000
index 0000000..730d787
--- /dev/null
+++ b/pintos-progos/tests/intro/userprog-args/args-dbl-space.ck
@@ -0,0 +1 @@
../../userprog/args-dbl-space.ck \ No newline at end of file
diff --git a/pintos-progos/tests/intro/userprog-args/args-limit.c b/pintos-progos/tests/intro/userprog-args/args-limit.c
new file mode 100644
index 0000000..159d868
--- /dev/null
+++ b/pintos-progos/tests/intro/userprog-args/args-limit.c
@@ -0,0 +1,70 @@
1/* Test the limit for (1) number of arguments and (2) total size of arguments */
2#include <syscall.h>
3#include <string.h>
4#include "tests/lib.h"
5
6#define MAX_SIZE 4096
7
8static bool recurse (int, int);
9
10char cmd[MAX_SIZE * 4];
11
12static bool
13recurse (int argsize, int argcount)
14{
15 int i, j;
16 char *p;
17 strlcpy (cmd, "args-limit", 11);
18 p = cmd+strlen(cmd);
19 for (i = 0; i < argcount; i++) {
20 *p++ = ' ';
21 for (j = 0; j < argsize; j++) {
22 *p++ = 'X';
23 }
24 }
25 *p = 0;
26 if (wait (exec (cmd)) < 0) {
27 return false;
28 } else {
29 return true;
30 }
31}
32
33int
34main (int argc, char **argv)
35{
36 test_name = argv[0];
37 if(argc <= 1) {
38 int step;
39 int max_args = 0, max_size = 0;
40
41 msg ("begin");
42
43 /* Binary search number of arguments */
44 for (step = MAX_SIZE; step > 0 && max_args < MAX_SIZE; step>>=1) {
45 int t = max_args + step;
46 if (recurse (1, t)) {
47 max_args = t;
48 }
49 }
50 if (max_args > 63) {
51 msg ("success. at least 64 command line arguments are supported.");
52 } else {
53 msg ("FAIL: Only %d command line arguments are supported",max_args);
54 }
55 /* Binary search size of arguments */
56 for (step = MAX_SIZE; step > 0 && max_size < MAX_SIZE; step>>=1) {
57 int t = max_size + step;
58 if (recurse (t, 1)) {
59 max_size = t;
60 }
61 }
62 if (max_size >= 100) {
63 msg ("success. arguments with at least 100 bytes are supported.");
64 } else {
65 msg ("FAIL: Arguments with more than %d bytes are not supported.",max_size);
66 }
67 msg ("end");
68 }
69 return 0;
70}
diff --git a/pintos-progos/tests/intro/userprog-args/args-limit.ck b/pintos-progos/tests/intro/userprog-args/args-limit.ck
new file mode 100644
index 0000000..ed8ead2
--- /dev/null
+++ b/pintos-progos/tests/intro/userprog-args/args-limit.ck
@@ -0,0 +1,11 @@
1# -*- perl -*-
2use strict;
3use warnings;
4use tests::tests;
5check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
6(args-limit) begin
7(args-limit) success. at least 64 command line arguments are supported.
8(args-limit) success. arguments with at least 100 bytes are supported.
9(args-limit) end
10EOF
11pass;
diff --git a/pintos-progos/tests/intro/userprog-args/args-many.ck b/pintos-progos/tests/intro/userprog-args/args-many.ck
new file mode 120000
index 0000000..ed175bd
--- /dev/null
+++ b/pintos-progos/tests/intro/userprog-args/args-many.ck
@@ -0,0 +1 @@
../../userprog/args-many.ck \ No newline at end of file
diff --git a/pintos-progos/tests/intro/userprog-args/args-multiple.ck b/pintos-progos/tests/intro/userprog-args/args-multiple.ck
new file mode 120000
index 0000000..4f9935f
--- /dev/null
+++ b/pintos-progos/tests/intro/userprog-args/args-multiple.ck
@@ -0,0 +1 @@
../../userprog/args-multiple.ck \ No newline at end of file
diff --git a/pintos-progos/tests/intro/userprog-args/args-none.ck b/pintos-progos/tests/intro/userprog-args/args-none.ck
new file mode 120000
index 0000000..861d319
--- /dev/null
+++ b/pintos-progos/tests/intro/userprog-args/args-none.ck
@@ -0,0 +1 @@
../../userprog/args-none.ck \ No newline at end of file
diff --git a/pintos-progos/tests/intro/userprog-args/args-single.ck b/pintos-progos/tests/intro/userprog-args/args-single.ck
new file mode 120000
index 0000000..df8e737
--- /dev/null
+++ b/pintos-progos/tests/intro/userprog-args/args-single.ck
@@ -0,0 +1 @@
../../userprog/args-single.ck \ No newline at end of file
diff --git a/pintos-progos/tests/intro/userprog-args/args.c b/pintos-progos/tests/intro/userprog-args/args.c
new file mode 120000
index 0000000..0d798ac
--- /dev/null
+++ b/pintos-progos/tests/intro/userprog-args/args.c
@@ -0,0 +1 @@
../../userprog/args.c \ No newline at end of file
diff --git a/pintos-progos/tests/intro/userprog-args/child-simple.c b/pintos-progos/tests/intro/userprog-args/child-simple.c
new file mode 120000
index 0000000..f8a3ce7
--- /dev/null
+++ b/pintos-progos/tests/intro/userprog-args/child-simple.c
@@ -0,0 +1 @@
../../userprog/child-simple.c \ No newline at end of file