mirror of https://github.com/m-labs/artiq.git
Commit missing parts of 9366a29
.
This commit is contained in:
parent
1be9e7576d
commit
225f7d7302
|
@ -42,7 +42,7 @@ def cache_get(key: TStr) -> TList(TInt32):
|
||||||
raise NotImplementedError("syscall not simulated")
|
raise NotImplementedError("syscall not simulated")
|
||||||
|
|
||||||
@syscall
|
@syscall
|
||||||
def cache_put(key: TStr, value: TList(TInt32)):
|
def cache_put(key: TStr, value: TList(TInt32)) -> TNone:
|
||||||
raise NotImplementedError("syscall not simulated")
|
raise NotImplementedError("syscall not simulated")
|
||||||
|
|
||||||
class Core:
|
class Core:
|
||||||
|
|
|
@ -940,9 +940,12 @@ static int process_kmsg(struct msg_base *umsg)
|
||||||
case MESSAGE_TYPE_FINISHED:
|
case MESSAGE_TYPE_FINISHED:
|
||||||
out_packet_empty(REMOTEMSG_TYPE_KERNEL_FINISHED);
|
out_packet_empty(REMOTEMSG_TYPE_KERNEL_FINISHED);
|
||||||
|
|
||||||
|
for(struct cache_row *iter = cache; iter; iter = iter->next)
|
||||||
|
iter->borrowed = 0;
|
||||||
|
|
||||||
kloader_stop();
|
kloader_stop();
|
||||||
user_kernel_state = USER_KERNEL_LOADED;
|
user_kernel_state = USER_KERNEL_LOADED;
|
||||||
mailbox_acknowledge();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MESSAGE_TYPE_EXCEPTION: {
|
case MESSAGE_TYPE_EXCEPTION: {
|
||||||
|
@ -1031,9 +1034,11 @@ static int process_kmsg(struct msg_base *umsg)
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!row) {
|
if(!row) {
|
||||||
struct cache_row *row = calloc(1, sizeof(struct cache_row));
|
row = calloc(1, sizeof(struct cache_row));
|
||||||
row->key = calloc(strlen(request->key) + 1, 1);
|
row->key = calloc(strlen(request->key) + 1, 1);
|
||||||
strcpy(row->key, request->key);
|
strcpy(row->key, request->key);
|
||||||
|
row->next = cache;
|
||||||
|
cache = row;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!row->borrowed) {
|
if(!row->borrowed) {
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
from artiq.language import *
|
||||||
|
from artiq.coredevice.exceptions import *
|
||||||
|
from artiq.test.hardware_testbench import ExperimentCase
|
||||||
|
|
||||||
|
|
||||||
|
class _Cache(EnvExperiment):
|
||||||
|
def build(self):
|
||||||
|
self.setattr_device("core")
|
||||||
|
self.print = lambda x: print(x)
|
||||||
|
|
||||||
|
@kernel
|
||||||
|
def get(self, key):
|
||||||
|
return self.core.get_cache(key)
|
||||||
|
|
||||||
|
@kernel
|
||||||
|
def put(self, key, value):
|
||||||
|
self.core.put_cache(key, value)
|
||||||
|
|
||||||
|
@kernel
|
||||||
|
def get_put(self, key, value):
|
||||||
|
self.get(key)
|
||||||
|
self.put(key, value)
|
||||||
|
|
||||||
|
class CacheTest(ExperimentCase):
|
||||||
|
def test_get_empty(self):
|
||||||
|
exp = self.create(_Cache)
|
||||||
|
self.assertEqual(exp.get("x1"), [])
|
||||||
|
|
||||||
|
def test_put_get(self):
|
||||||
|
exp = self.create(_Cache)
|
||||||
|
exp.put("x2", [1, 2, 3])
|
||||||
|
self.assertEqual(exp.get("x2"), [1, 2, 3])
|
||||||
|
|
||||||
|
def test_replace(self):
|
||||||
|
exp = self.create(_Cache)
|
||||||
|
exp.put("x3", [1, 2, 3])
|
||||||
|
exp.put("x3", [1, 2, 3, 4, 5])
|
||||||
|
self.assertEqual(exp.get("x3"), [1, 2, 3, 4, 5])
|
||||||
|
|
||||||
|
def test_borrow(self):
|
||||||
|
exp = self.create(_Cache)
|
||||||
|
exp.put("x4", [1, 2, 3])
|
||||||
|
with self.assertRaises(CacheError):
|
||||||
|
exp.get_put("x4", [])
|
Loading…
Reference in New Issue