summaryrefslogtreecommitdiffstats
path: root/pintos-progos/tests/intro/userprog-args
diff options
context:
space:
mode:
Diffstat (limited to 'pintos-progos/tests/intro/userprog-args')
-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
11 files changed, 122 insertions, 0 deletions
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