OSDN Git Service

* public snapshot of sid simulator
[pf3gnuchains/pf3gnuchains3x.git] / sid / component / testsuite / sidcomp.memory / genericmemory.exp
1 set test "sid configuration"
2 sid_config_component_test "base.conf" \
3     "load [sid_find_file libmemory.la] mem_component_library" \
4     "hw-memory-ram/rom-basic"
5 pass $test
6
7
8 set test "sid startup"
9 if [sid_start "base.conf"] then { pass $test } else { fail $test ; return }
10
11 set test "attribute list"
12 sid_assert_includes_all "sid::component::attribute_names $victim" "size state-snapshot"
13
14 set test "set size = 512"
15 sid_assert_success "sid::component::set_attribute_value $victim size 0x200"
16
17 set test "get buses"
18 set robus [sid_cmd "sid::component::find_bus $victim read-only-port"]
19 set rwbus [sid_cmd "sid::component::find_bus $victim read-write-port"]
20 if {$robus == "" || $rwbus == ""} then { fail $test } else { pass $test }
21
22 set test "fill memory with junk bytes"
23 set data 4
24 set size [sid_cmd "sid::component::attribute_value $victim size"]
25 for {set addr 0} {$addr < $size} {incr addr} {
26 # some pseudorandom sequence
27     set data [expr {(($data * 17) + 23) % 256}]
28     set result [sid_cmd "sid::bus::write_h4_l1 $rwbus $addr $data"]
29     if {$result != "ok"} then { fail $test ; break }
30 }
31 if {$addr == $size} then { pass $test } else { fail $test }
32
33 set test "read junk from memory via read-only port"
34 set data 4
35 set size [sid_cmd "sid::component::attribute_value $victim size"]
36 for {set addr 0} {$addr < $size} {incr addr} {
37 # same pseudorandom sequence as above
38     set data [expr {(($data * 17) + 23) % 256}]
39     set result [sid_cmd "sid::bus::read_h4_l1 $robus $addr"]
40     set status [lindex $result 0]
41     if {$status != "ok"} then {fail "$test - bad" ; break }
42     set result_data [lindex $result 1]
43     if {$result_data != $data} then {fail "$test - mismatch @ $addr - $result_data vs $data" ; break}
44 }
45 if {$addr == $size} then { pass $test } else { fail $test }
46
47 set test "get memory state dump"
48 set state [sid_cmd "sid::component::attribute_value $victim state-snapshot"]
49 if {$state != ""} then { pass $test } else { fail $test }
50
51 set test "reset memory size"
52 sid_assert_success "sid::component::set_attribute_value $victim size 234000"
53
54 set test "spot check clear memory"
55 set result0 [sid_cmd "sid::bus::read_h4_l1 $rwbus 0x0"]
56 set result1 [sid_cmd "sid::bus::read_h4_l1 $rwbus 0x2F4D"]
57 set result2 [sid_cmd "sid::bus::read_h4_l1 $rwbus 0x39BA"]
58 if {$result0 != "ok 0" || $result1 != "ok 0" || $result2 != "ok 0"} then { fail $test } else { pass $test }
59
60 set test "set memory state dump"
61 #set t $timeout ; set timeout 30
62 set ok [sid_cmd "sid::component::set_attribute_value $victim state-snapshot [list $state]"]
63 #set timeout $t
64 if {$ok == "ok"} then { pass $test } else { fail $test }
65
66 set test "check memory size after restore"
67 set new_size [sid_cmd "sid::component::attribute_value $victim size"]
68 if {$size == $new_size} then { pass $test } else { fail $test }
69
70 set test "reread junk from memory after restore"
71 set data 4
72 set size [sid_cmd "sid::component::attribute_value $victim size"]
73 for {set addr 0} {$addr < $size} {incr addr} {
74 # same pseudorandom sequence as above
75     set data [expr {(($data * 17) + 23) % 256}]
76     set result [sid_cmd "sid::bus::read_h4_l1 $robus $addr"]
77     set status [lindex $result 0]
78     if {$status != "ok"} then {fail "$test - bad" ; break}
79     set result_data [lindex $result 1]
80     if {$result_data != $data} then {fail "$test - mismatch @ $addr - $result_data vs $data" ; break}
81 }
82 if {$addr == $size} then { pass $test } else { fail $test }
83
84 set test "test for memory leaks"
85 set iterations 100
86 for {set i 0} {$i < $iterations} {incr i} {
87 # some size between 1 .. 16 MB
88     set size [expr {1000000 + (($i * 101) % 16) * 1000000}]
89     sid_cmd "sid::component::set_attribute_value $victim size $size"
90 }
91 sid_assert_success "sid::component::set_attribute_value $victim size 0"
92
93 set test "resize memory for file test"  
94 sid_assert_success "sid::component::set_attribute_value $victim size 7234"
95
96 set test "read memory image from a file"
97 set file [open "test.dat" "w"]
98 fconfigure $file -translation binary
99 set data 0
100 set size [sid_cmd "sid::component::attribute_value $victim size"]
101 for {set i 0} {$i < $size} {incr i} {
102     set data [expr {(($data * 19) + 13) % 256}]
103     puts -nonewline $file [binary format "c" $data]
104 }
105 close $file
106 set res [sid_cmd "sid::component::set_attribute_value $victim image-file test.dat"]
107 set pin [sid_cmd "sid::component::find_pin $victim image-load"]
108 sid_cmd "sid::pin::driven_h4 $pin 0"
109 file delete -force $file
110 if {$res == "ok" && $pin != ""} then { pass $test } else { fail $test }
111
112 set test "verify read memory image"
113 set data 0
114 set size [sid_cmd "sid::component::attribute_value $victim size"]
115 for {set i 0} {$i < $size} {incr i} {
116     set data [expr {(($data * 19) + 13) % 256}]
117     set result [sid_cmd "sid::bus::read_h4_l1 $robus $i"]
118     set status [lindex $result 0]
119     if {$status != "ok"} then {fail "$test - bad" ; break}
120     set result_data [lindex $result 1]
121     if {$result_data != $data} then {fail "$test - mismatch @ $i - $result_data vs $data" ; break}
122 }
123 if {$i == $size} then { pass $test } else { fail $test }
124
125 set test "make a big memory buffer"
126 set size 10000
127 sid_assert_success "sid::component::set_attribute_value $victim size $size"
128
129 set test "fill it sparsely"
130 set data 0
131 set sparse 10
132 for {set i 0} {$i < $sparse} {incr i} {
133     set data [expr {(($data * 19) + 13) % $size}]
134     set addr $data
135     set result [sid_cmd "sid::bus::write_h4_l1 $rwbus $addr 0xFE"]
136     if {$result != "ok"} then { fail $test ; break }
137 }
138 if {$i == $sparse} then { pass $test } else { fail $test }
139
140 set test "take sparse (RLE) snapshot"
141 set state [sid_cmd "sid::component::attribute_value $victim state-snapshot"]
142 if {[string length $state] < 10 || [string length $state] > 5000} then { fail $test } else { pass $test }
143
144 set test "clear memory"
145 set result [sid_cmd "sid::component::set_attribute_value $victim size 0"]
146 if {$result == "ok"} then { pass $test } else { fail $test }
147
148 set test "reload sparse (RLE) snapshot"
149 set result [sid_cmd "sid::component::set_attribute_value $victim state-snapshot [list $state]"]
150 if {$result == "ok"} then { pass $test } else { fail $test }
151
152 set test "load junk snapshot"
153 set result [sid_cmd "sid::component::set_attribute_value $victim state-snapshot bad-crap-bad-crap"]
154 if {$result == "bad_value"} then { pass $test } else { fail $test }
155
156 set test "save & restore large memory snapshot"
157 set o1 [sid_cmd "sid::component::set_attribute_value $victim size 800000"]
158 set state [sid_cmd "sid::component::attribute_value $victim state-snapshot"]
159 set o2 [sid_cmd "sid::component::set_attribute_value $victim state-snapshot [list $state]"]
160 if {$state != "" && $o1 == "ok" && $o2 == "ok"} then { pass $test } else { fail "$test - $o1 $o2" }
161
162 set test "sid stop"
163 if [sid_stop] then { pass $test } else { fail $test ; return }
164
165
166 # zap temp file if tests were successful 
167 global exit_status
168 if {$exit_status == "0"} then { file delete "base.conf" }