|
|
1.1 root 1: \ this is the memory management testsuite.
2: \
3: \ run it with paflof < memory-testsuite.fs 2>/dev/null
4:
5: s" memory.fs" included
6:
7: \ dumps all free-list entries
8: \ useful for debugging.
9:
10: : dump-freelist ( -- )
11: ." Dumping freelist:" cr
12: free-list @
13:
14: \ If the free list is empty we notify the user.
15: dup 0= if ." empty." drop cr exit then
16:
17: begin dup 0<> while
18: dup ." entry 0x" . \ print pointer to entry
19: dup cell+ @ ." , next=0x" u. \ pointer to next entry
20: dup @ ." , size=0x" u. cr \ len of current entry
21:
22: cell+ @
23: repeat
24: cr drop
25: ;
26:
27: \ simple testsuite. run testsuite-init to initialize
28: \ with some dummy memory in the dictionary.
29: \ run testsuite-test[1..3] for different tests.
30:
31: : testsuite-init ( -- )
32: here 40000 cell+ dup allot ( -- ptr len )
33: init-mem
34:
35: ." start-mem = 0x" start-mem @ . cr
36: ." end-mem = 0x" end-mem @ . cr
37: ." free-list = 0x" free-list @ . cr
38:
39: ." Memory management initialized." cr
40: dump-freelist
41: ;
42:
43: : testsuite-test1 ( -- )
44: ." Test No. 1: Allocating all available memory (256k)" cr
45:
46: 40000 alloc-mem
47: dup 0<> if
48: ." worked, ptr=0x" dup .
49: else
50: ." did not work."
51: then
52: cr
53:
54: dump-freelist
55: ." Freeing memory." cr
56: ." stack=" .s cr
57: free-mem
58: dump-freelist
59: ;
60:
61: : testsuite-test2 ( -- )
62: ." Test No. 2: Allocating 5 blocks" cr
63: 4000 alloc-mem
64: 4000 alloc-mem
65: 4000 alloc-mem
66: 4000 alloc-mem
67: 4000 alloc-mem
68:
69: ." Allocated 5 blocks. Stack:" cr .s cr
70:
71: dump-freelist
72:
73: ." Freeing Block 2" cr
74: 3 pick free-mem dump-freelist
75:
76: ." Freeing Block 4" cr
77: over free-mem dump-freelist
78:
79: ." Freeing Block 3" cr
80: 2 pick free-mem dump-freelist
81:
82: ." Cleaning up blocks 1 and 5" cr
83: free-mem \ Freeing block 5
84: dump-freelist
85: 3drop \ blocks 4, 3, 2
86: free-mem
87:
88: dump-freelist
89: ;
90:
91: : testsuite-test3 ( -- )
92: ." Test No. 3: freeing illegal address 0xdeadbeef." cr
93: deadbeef free-mem
94: dump-freelist
95: ;
96:
97: : testsuite ( -- )
98: testsuite-init
99: testsuite-test1
100: testsuite-test2
101: testsuite-test3
102: ;
103:
104: testsuite
105:
106: bye
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.