コード例 #1
0
ファイル: test_wrapper.py プロジェクト: HPI-SWA-Lab/RSqueak
 def new_process_consistency(self, process, old_process, w_active_context):
     scheduler = wrapper.scheduler(space)
     assert scheduler.active_process() is process.wrapped
     priority_list = wrapper.scheduler(space).get_process_list(process.priority())
     assert priority_list.first_link() is priority_list.last_link()
     # activate does not remove the process from the process_list.
     # The caller of activate is responsible
     assert priority_list.first_link() is process.wrapped
コード例 #2
0
ファイル: test_wrapper.py プロジェクト: smarr/RSqueak
 def new_process_consistency(self, process, old_process, w_active_context):
     scheduler = wrapper.scheduler(space)
     assert scheduler.active_process() is process.wrapped
     priority_list = wrapper.scheduler(space).get_process_list(
         process.priority())
     assert priority_list.first_link() is priority_list.last_link()
     # activate does not remove the process from the process_list.
     # The caller of activate is responsible
     assert priority_list.first_link() is process.wrapped
コード例 #3
0
ファイル: test_wrapper.py プロジェクト: HPI-SWA-Lab/RSqueak
 def test_highest_priority(self):
     py.test.raises(FatalError, wrapper.scheduler(space).wake_highest_priority_process)
     process, old_process = self.make_processes(4, 2, space.w_false)
     process.put_to_sleep()
     old_process.put_to_sleep()
     highest = wrapper.scheduler(space).wake_highest_priority_process()
     assert highest.wrapped is process.wrapped
     highest = wrapper.scheduler(space).wake_highest_priority_process()
     assert highest.wrapped is old_process.wrapped
     py.test.raises(FatalError, wrapper.scheduler(space).wake_highest_priority_process)
コード例 #4
0
ファイル: test_wrapper.py プロジェクト: HPI-SWA-Lab/RSqueak
 def test_suspend_active(self):
     suspended_context = new_frame()
     process, old_process = self.make_processes(4, 2, suspended_context)
     current_context = new_frame()
     with py.test.raises(interpreter.ProcessSwitch):
         old_process.suspend(current_context)
     process_list = wrapper.scheduler(space).get_process_list(old_process.priority())
     assert process_list.first_link() is process_list.last_link()
     assert process_list.first_link().is_nil(space)
     assert old_process.my_list().is_nil(space)
     assert old_process.suspended_context() is current_context.w_self()
     assert wrapper.scheduler(space).active_process() is process.wrapped
コード例 #5
0
ファイル: test_wrapper.py プロジェクト: smarr/RSqueak
 def test_highest_priority(self):
     py.test.raises(FatalError,
                    wrapper.scheduler(space).wake_highest_priority_process)
     process, old_process = self.make_processes(4, 2, space.w_false)
     process.put_to_sleep()
     old_process.put_to_sleep()
     highest = wrapper.scheduler(space).wake_highest_priority_process()
     assert highest.wrapped is process.wrapped
     highest = wrapper.scheduler(space).wake_highest_priority_process()
     assert highest.wrapped is old_process.wrapped
     py.test.raises(FatalError,
                    wrapper.scheduler(space).wake_highest_priority_process)
コード例 #6
0
ファイル: test_wrapper.py プロジェクト: smarr/RSqueak
 def test_suspend_active(self):
     suspended_context = new_frame()
     process, old_process = self.make_processes(4, 2, suspended_context)
     current_context = new_frame()
     with py.test.raises(interpreter.ProcessSwitch):
         old_process.suspend(current_context)
     process_list = wrapper.scheduler(space).get_process_list(
         old_process.priority())
     assert process_list.first_link() is process_list.last_link()
     assert process_list.first_link().is_nil(space)
     assert old_process.my_list().is_nil(space)
     assert old_process.suspended_context() is current_context.w_self()
     assert wrapper.scheduler(space).active_process() is process.wrapped
コード例 #7
0
ファイル: storage.py プロジェクト: HPI-SWA-Lab/RSqueak
def get_instances_array(interp, s_frame, w_class=None, store=True,
                        some_instance=False):
    # early return for classes that never had instances. This is true for a
    # bunch of special classes.
    if w_class:
        if interp.space.w_SmallInteger.is_same_object(w_class):
            return []
        if interp.space.is_spur.is_set():
            if interp.space.w_Character.is_same_object(w_class):
                return []
            if interp.image.version.is_64bit:
                if interp.space.w_Float.is_same_object(w_class):
                    return []
        if interp.image.version.is_modern:
            if interp.space.w_BlockContext.is_same_object(w_class):
                return []
    # make sure we also get any objects in the currently active process
    w_active_process = wrapper.scheduler(interp.space).active_process()
    active_process = wrapper.ProcessWrapper(interp.space, w_active_process)
    active_process.store_suspended_context(s_frame.w_self())
    try:
        match_w = s_frame.instances_array(w_class)
        if match_w is None:
            if some_instance and interp.space.is_spur.is_set():
                # on Spur, someInstance really means just one, it's not used to
                # start iterating over all instances
                return get_instances_array_trace(interp, w_class,
                                                 some_instance=True)
            match_w = get_instances_array_trace(interp, w_class)
            if store:
                s_frame.store_instances_array(w_class, match_w)
        return match_w
    finally:
        active_process.store_suspended_context(interp.space.w_nil)
コード例 #8
0
ファイル: test_wrapper.py プロジェクト: HPI-SWA-Lab/RSqueak
    def test_semaphore_signal_wait(self):
        semaphore = new_semaphore()
        self.space = space
        semaphore.signal(self)
        suspendedcontext = new_frame()
        currentcontext = new_frame()
        process, old_process = self.make_processes(4, 2, suspendedcontext)
        semaphore.wait(currentcontext)
        assert semaphore.is_empty_list()
        assert wrapper.scheduler(space).active_process() is old_process.wrapped
        with py.test.raises(interpreter.ProcessSwitch):
            semaphore.wait(currentcontext)
        assert semaphore.first_link() is old_process.wrapped
        assert wrapper.scheduler(space).active_process() is process.wrapped

        py.test.raises(FatalError, semaphore.wait, space.w_true)
コード例 #9
0
ファイル: main.py プロジェクト: HPI-SWA-Lab/RSqueak
def active_context(space):
    w_active_process = wrapper.scheduler(space).active_process()
    active_process = wrapper.ProcessWrapper(space, w_active_process)
    w_active_context = active_process.suspended_context()
    assert isinstance(w_active_context, W_PointersObject)
    active_process.store_suspended_context(space.w_nil)
    return w_active_context.as_context_get_shadow(space)
コード例 #10
0
ファイル: test_wrapper.py プロジェクト: HPI-SWA-Lab/RSqueak
 def test_suspend_asleep(self):
     process, old_process = self.make_processes(4, 2, space.w_false)
     process.suspend(space.w_true)
     process_list = wrapper.scheduler(space).get_process_list(process.priority())
     assert process_list.first_link() is process_list.last_link()
     assert process_list.first_link().is_nil(space)
     assert process.my_list().is_nil(space)
コード例 #11
0
ファイル: main.py プロジェクト: swipswaps/RSqueak
def active_context(space):
    w_active_process = wrapper.scheduler(space).active_process()
    active_process = wrapper.ProcessWrapper(space, w_active_process)
    w_active_context = active_process.suspended_context()
    assert isinstance(w_active_context, W_PointersObject)
    active_process.store_suspended_context(space.w_nil)
    return w_active_context.as_context_get_shadow(space)
コード例 #12
0
ファイル: test_wrapper.py プロジェクト: smarr/RSqueak
    def test_semaphore_signal_wait(self):
        semaphore = new_semaphore()
        self.space = space
        semaphore.signal(self)
        suspendedcontext = new_frame()
        currentcontext = new_frame()
        process, old_process = self.make_processes(4, 2, suspendedcontext)
        semaphore.wait(currentcontext)
        assert semaphore.is_empty_list()
        assert wrapper.scheduler(space).active_process() is old_process.wrapped
        with py.test.raises(interpreter.ProcessSwitch):
            semaphore.wait(currentcontext)
        assert semaphore.first_link() is old_process.wrapped
        assert wrapper.scheduler(space).active_process() is process.wrapped

        py.test.raises(FatalError, semaphore.wait, space.w_true)
コード例 #13
0
ファイル: test_wrapper.py プロジェクト: smarr/RSqueak
 def test_suspend_asleep(self):
     process, old_process = self.make_processes(4, 2, space.w_false)
     process.suspend(space.w_true)
     process_list = wrapper.scheduler(space).get_process_list(
         process.priority())
     assert process_list.first_link() is process_list.last_link()
     assert process_list.first_link().is_nil(space)
     assert process.my_list().is_nil(space)
コード例 #14
0
ファイル: test_wrapper.py プロジェクト: HPI-SWA-Lab/RSqueak
    def test_semaphore_wait_signal(self):
        semaphore = new_semaphore()
        suspendedcontext = new_frame()
        currentcontext = new_frame()
        process, old_process = self.make_processes(4, 2, suspendedcontext)

        with py.test.raises(interpreter.ProcessSwitch):
            semaphore.wait(currentcontext)

        assert wrapper.scheduler(space).active_process() is process.wrapped
        semaphore.signal(currentcontext)
        assert wrapper.scheduler(space).active_process() is process.wrapped
        process_list = wrapper.scheduler(space).get_process_list(old_process.priority())
        assert process_list.remove_first_link_of_list() is old_process.wrapped

        process.write(2, space.wrap_int(1))
        with py.test.raises(interpreter.ProcessSwitch):
            old_process.resume(currentcontext)
        assert wrapper.scheduler(space).active_process() is old_process.wrapped
        with py.test.raises(interpreter.ProcessSwitch):
            semaphore.wait(currentcontext)
        assert wrapper.scheduler(space).active_process() is process.wrapped
        with py.test.raises(interpreter.ProcessSwitch):
            semaphore.signal(currentcontext)
        assert wrapper.scheduler(space).active_process() is old_process.wrapped

        process_list = wrapper.scheduler(space).get_process_list(process.priority())
        assert process_list.first_link() is process.wrapped
コード例 #15
0
ファイル: test_wrapper.py プロジェクト: smarr/RSqueak
    def test_semaphore_wait_signal(self):
        semaphore = new_semaphore()
        suspendedcontext = new_frame()
        currentcontext = new_frame()
        process, old_process = self.make_processes(4, 2, suspendedcontext)

        with py.test.raises(interpreter.ProcessSwitch):
            semaphore.wait(currentcontext)

        assert wrapper.scheduler(space).active_process() is process.wrapped
        semaphore.signal(currentcontext)
        assert wrapper.scheduler(space).active_process() is process.wrapped
        process_list = wrapper.scheduler(space).get_process_list(
            old_process.priority())
        assert process_list.remove_first_link_of_list() is old_process.wrapped

        process.write(2, space.wrap_int(1))
        with py.test.raises(interpreter.ProcessSwitch):
            old_process.resume(currentcontext)
        assert wrapper.scheduler(space).active_process() is old_process.wrapped
        with py.test.raises(interpreter.ProcessSwitch):
            semaphore.wait(currentcontext)
        assert wrapper.scheduler(space).active_process() is process.wrapped
        with py.test.raises(interpreter.ProcessSwitch):
            semaphore.signal(currentcontext)
        assert wrapper.scheduler(space).active_process() is old_process.wrapped

        process_list = wrapper.scheduler(space).get_process_list(
            process.priority())
        assert process_list.first_link() is process.wrapped
コード例 #16
0
ファイル: test_wrapper.py プロジェクト: HPI-SWA-Lab/RSqueak
 def test_semaphore_wait(self):
     semaphore = new_semaphore()
     suspendedcontext = new_frame()
     currentcontext = new_frame()
     process, old_process = self.make_processes(4, 2, suspendedcontext)
     with py.test.raises(interpreter.ProcessSwitch):
         semaphore.wait(currentcontext)
     assert semaphore.first_link() is old_process.wrapped
     assert wrapper.scheduler(space).active_process() is process.wrapped
コード例 #17
0
ファイル: test_wrapper.py プロジェクト: smarr/RSqueak
 def test_semaphore_wait(self):
     semaphore = new_semaphore()
     suspendedcontext = new_frame()
     currentcontext = new_frame()
     process, old_process = self.make_processes(4, 2, suspendedcontext)
     with py.test.raises(interpreter.ProcessSwitch):
         semaphore.wait(currentcontext)
     assert semaphore.first_link() is old_process.wrapped
     assert wrapper.scheduler(space).active_process() is process.wrapped
コード例 #18
0
ファイル: test_wrapper.py プロジェクト: HPI-SWA-Lab/RSqueak
    def make_processes(self, sleepingpriority, runningpriority,
                             sleepingcontext):
        if not isinstance(sleepingcontext, W_Object):
            sleepingcontext = sleepingcontext.w_self()
        scheduler = wrapper.scheduler(space)
        sleeping = new_process(priority=sleepingpriority, w_suspended_context=sleepingcontext)
        sleeping.put_to_sleep()
        running = new_process(priority=runningpriority)
        scheduler.store_active_process(running.wrapped)

        return sleeping, running
コード例 #19
0
ファイル: test_wrapper.py プロジェクト: smarr/RSqueak
    def make_processes(self, sleepingpriority, runningpriority,
                       sleepingcontext):
        if not isinstance(sleepingcontext, W_Object):
            sleepingcontext = sleepingcontext.w_self()
        scheduler = wrapper.scheduler(space)
        sleeping = new_process(priority=sleepingpriority,
                               w_suspended_context=sleepingcontext)
        sleeping.put_to_sleep()
        running = new_process(priority=runningpriority)
        scheduler.store_active_process(running.wrapped)

        return sleeping, running
コード例 #20
0
ファイル: test_miniimage.py プロジェクト: swipswaps/RSqueak
def test_step_run_something():
    space, interp = runningSomethingImage(cached=False)
    ap = wrapper.ProcessWrapper(space, wrapper.scheduler(space).active_process())
    w_ctx = ap.suspended_context()
    s_ctx = w_ctx.as_context_get_shadow(space)
    ap.store_suspended_context(space.w_nil)

    assert isinstance(s_ctx, storage_contexts.ContextPartShadow)
    assert s_ctx.top().is_same_object(space.w_true)
    interp.step(s_ctx)
    interp.step(s_ctx)
    assert s_ctx.top().value == 1
    interp.step(s_ctx)
    assert s_ctx.top().value == 2
    interp.step(s_ctx)
    assert s_ctx.top().value == 3
コード例 #21
0
ファイル: main.py プロジェクト: swipswaps/RSqueak
def create_process(interp, s_frame):
    space = interp.space
    w_active_process = wrapper.scheduler(space).active_process()
    assert isinstance(w_active_process, W_PointersObject)
    w_benchmark_proc = W_PointersObject(space,
                                        w_active_process.getclass(space),
                                        w_active_process.size())
    if interp.image.version.has_closures:
        # Priorities below 10 are not allowed in newer versions of Squeak.
        active_priority = space.unwrap_int(w_active_process.fetch(space, 2))
        priority = active_priority / 2 + 1
        priority = max(11, priority)
    else:
        priority = 7
    w_benchmark_proc.store(space, 1, s_frame.w_self())
    w_benchmark_proc.store(space, 2, space.wrap_int(priority))

    # Make process eligible for scheduling
    wrapper.ProcessWrapper(space, w_benchmark_proc).put_to_sleep()
コード例 #22
0
ファイル: main.py プロジェクト: HPI-SWA-Lab/RSqueak
def create_process(interp, s_frame):
    space = interp.space
    w_active_process = wrapper.scheduler(space).active_process()
    assert isinstance(w_active_process, W_PointersObject)
    w_benchmark_proc = W_PointersObject(
        space, w_active_process.getclass(space), w_active_process.size()
    )
    if interp.image.version.has_closures:
        # Priorities below 10 are not allowed in newer versions of Squeak.
        active_priority = space.unwrap_int(w_active_process.fetch(space, 2))
        priority = active_priority / 2 + 1
        priority = max(11, priority)
    else:
        priority = 7
    w_benchmark_proc.store(space, 1, s_frame.w_self())
    w_benchmark_proc.store(space, 2, space.wrap_int(priority))

    # Make process eligible for scheduling
    wrapper.ProcessWrapper(space, w_benchmark_proc).put_to_sleep()
コード例 #23
0
ファイル: storage.py プロジェクト: swipswaps/RSqueak
def get_instances_array(interp,
                        s_frame,
                        w_class=None,
                        store=True,
                        some_instance=False):
    # early return for classes that never had instances. This is true for a
    # bunch of special classes.
    if w_class:
        if interp.space.w_SmallInteger.is_same_object(w_class):
            return []
        if interp.space.is_spur.is_set():
            if interp.space.w_Character.is_same_object(w_class):
                return []
            if interp.image.version.is_64bit:
                if interp.space.w_Float.is_same_object(w_class):
                    return []
        if interp.image.version.is_modern:
            if interp.space.w_BlockContext.is_same_object(w_class):
                return []
    # make sure we also get any objects in the currently active process
    w_active_process = wrapper.scheduler(interp.space).active_process()
    active_process = wrapper.ProcessWrapper(interp.space, w_active_process)
    active_process.store_suspended_context(s_frame.w_self())
    try:
        match_w = s_frame.instances_array(w_class)
        if match_w is None:
            if some_instance and interp.space.is_spur.is_set():
                # on Spur, someInstance really means just one, it's not used to
                # start iterating over all instances
                return get_instances_array_trace(interp,
                                                 w_class,
                                                 some_instance=True)
            match_w = get_instances_array_trace(interp, w_class)
            if store:
                s_frame.store_instances_array(w_class, match_w)
        return match_w
    finally:
        active_process.store_suspended_context(interp.space.w_nil)
コード例 #24
0
ファイル: test_wrapper.py プロジェクト: smarr/RSqueak
 def test_put_to_sleep(self):
     process = new_process(priority=2)
     process.put_to_sleep()
     process_list = wrapper.scheduler(space).get_process_list(2)
     assert process_list.first_link() is process_list.last_link()
     assert process_list.first_link() is process.wrapped
コード例 #25
0
ファイル: test_wrapper.py プロジェクト: smarr/RSqueak
 def old_process_consistency(self, old_process, old_process_context):
     assert old_process.suspended_context() is old_process_context.w_self()
     priority_list = wrapper.scheduler(space).get_process_list(
         old_process.priority())
     assert priority_list.first_link() is old_process.wrapped
コード例 #26
0
ファイル: test_miniimage.py プロジェクト: swipswaps/RSqueak
def test_step_forged_image():
    ap = wrapper.ProcessWrapper(space, wrapper.scheduler(space).active_process())
    s_ctx = ap.suspended_context().as_context_get_shadow(space)
    assert isinstance(s_ctx, storage_contexts.ContextPartShadow)
    assert s_ctx.top().is_same_object(space.w_true)
コード例 #27
0
ファイル: test_wrapper.py プロジェクト: HPI-SWA-Lab/RSqueak
 def test_put_to_sleep(self):
     process = new_process(priority=2)
     process.put_to_sleep()
     process_list = wrapper.scheduler(space).get_process_list(2)
     assert process_list.first_link() is process_list.last_link()
     assert process_list.first_link() is process.wrapped
コード例 #28
0
ファイル: test_wrapper.py プロジェクト: HPI-SWA-Lab/RSqueak
 def old_process_consistency(self, old_process, old_process_context):
     assert old_process.suspended_context() is old_process_context.w_self()
     priority_list = wrapper.scheduler(space).get_process_list(old_process.priority())
     assert priority_list.first_link() is old_process.wrapped