Author: Anton Gulenko <anton.gule...@googlemail.com> Branch: strategies-tagging Changeset: r683:818054edd715 Date: 2014-03-20 19:36 +0100 http://bitbucket.org/pypy/lang-smalltalk/changeset/818054edd715/
Log: Fixed test_strategies.py, added tests for FloatStrategy. diff --git a/spyvm/strategies.py b/spyvm/strategies.py --- a/spyvm/strategies.py +++ b/spyvm/strategies.py @@ -26,7 +26,7 @@ def store(self, space, w_obj, n0, w_val): if self.can_contain(space, w_val): return self.do_store(space, w_obj, n0, w_val) - new_strategy = find_strategy_for_object(space, w_val) + new_strategy = find_strategy_for_objects(space, [w_val]) return w_obj.store_with_new_strategy(space, new_strategy, n0, w_val) def can_contain(self, space, w_val): @@ -199,9 +199,6 @@ assert isinstance(w_val, model.W_Float) return space.unwrap_float(w_val) -def find_strategy_for_object(space, var): - return find_strategy_for_objects(space, [var]) - def find_strategy_for_objects(space, vars): if only_list_storage: ListStorageStrategy.singleton diff --git a/spyvm/test/test_strategies.py b/spyvm/test/test_strategies.py --- a/spyvm/test/test_strategies.py +++ b/spyvm/test/test_strategies.py @@ -15,24 +15,29 @@ a.store(space, 0, arr(1)) return a -def tagging_arr(size): +def int_arr(size): a = arr(size) a.store(space, 0, space.wrap_int(12)) return a -def tagging_arr_odd(size): +def float_arr(size): a = arr(size) - a.store(space, 2, space.wrap_int(12)) + a.store(space, 0, space.wrap_float(1.2)) return a def check_arr(arr, expected): for i in range(arr.basic_size()): + w_val = arr.fetch(space, i) if expected[i] == w_nil: - assert arr.fetch(space, i) == w_nil - else: - w_val = arr.fetch(space, i) + assert w_val == w_nil + elif isinstance(expected[i], int): assert isinstance(w_val, model.W_SmallInteger) assert space.unwrap_int(w_val) == expected[i] + elif isinstance(expected[i], float): + assert isinstance(w_val, model.W_Float) + assert space.unwrap_float(w_val) == expected[i] + else: + assert False, "Unexpected array of expected values." # ====== AllNil StorageStrategy @@ -76,41 +81,82 @@ a.store(space, 1, arr(1)) assert a.basic_size() == 5 -# ====== Tagging SmallInteger StorageStrategy +# ====== SmallIntegerOrNil StorageStrategy def test_AllNil_to_Int(): - a = tagging_arr(5) - assert isinstance(a.strategy, strategies.TaggingSmallIntegerStorageStrategy) + a = int_arr(5) + assert isinstance(a.strategy, strategies.SmallIntegerOrNilStorageStrategy) check_arr(a, [12, w_nil, w_nil, w_nil, w_nil]) -def test_Tagging_store(): - a = tagging_arr(5) +def test_SmallInt_store(): + a = int_arr(5) a.store(space, 1, space.wrap_int(20)) a.store(space, 2, space.wrap_int(20)) - assert isinstance(a.strategy, strategies.TaggingSmallIntegerStorageStrategy) + assert isinstance(a.strategy, strategies.SmallIntegerOrNilStorageStrategy) check_arr(a, [12, 20, 20, w_nil, w_nil]) -def test_Tagging_store_nil_to_nil(): - a = tagging_arr_odd(5) +def test_SmallInt_store_nil_to_nil(): + a = int_arr(5) a.store(space, 1, w_nil) - check_arr(a, [w_nil, w_nil, 12, w_nil, w_nil]) + check_arr(a, [12, w_nil, w_nil, w_nil, w_nil]) -def test_Tagging_delete(): - a = tagging_arr_odd(5) +def test_SmallInt_overwrite(): + a = int_arr(5) a.store(space, 1, space.wrap_int(1)) a.store(space, 3, space.wrap_int(2)) - a.store(space, 2, space.wrap_int(100)) + a.store(space, 0, space.wrap_int(100)) a.store(space, 1, space.wrap_int(200)) a.store(space, 3, space.wrap_int(300)) - check_arr(a, [w_nil, 200, 100, 300, w_nil]) + check_arr(a, [100, 200, w_nil, 300, w_nil]) -def test_Tagging_delete_first(): - a = tagging_arr_odd(5) +def test_SmallInt_delete(): + a = int_arr(5) a.store(space, 1, space.wrap_int(1)) a.store(space, 1, w_nil) - check_arr(a, [w_nil, w_nil, 12, w_nil, w_nil]) + check_arr(a, [12, w_nil, w_nil, w_nil, w_nil]) -def test_Tagging_to_List(): - a = tagging_arr_odd(5) +def test_SmallInt_to_List(): + a = int_arr(5) a.store(space, 1, arr(1)) assert isinstance(a.strategy, strategies.ListStorageStrategy) + +# ====== FloatOrNil StorageStrategy + +def test_AllNil_to_Float(): + a = float_arr(5) + assert isinstance(a.strategy, strategies.FloatOrNilStorageStrategy) + check_arr(a, [1.2, w_nil, w_nil, w_nil, w_nil]) + +def test_Float_store(): + a = float_arr(5) + a.store(space, 1, space.wrap_float(20.0)) + a.store(space, 2, space.wrap_float(20.0)) + assert isinstance(a.strategy, strategies.FloatOrNilStorageStrategy) + check_arr(a, [1.2, 20.0, 20.0, w_nil, w_nil]) + +def test_Float_store_nil_to_nil(): + a = float_arr(5) + a.store(space, 1, w_nil) + check_arr(a, [1.2, w_nil, w_nil, w_nil, w_nil]) + +def test_Float_overwrite(): + a = float_arr(5) + a.store(space, 1, space.wrap_float(1.0)) + a.store(space, 3, space.wrap_float(2.0)) + a.store(space, 0, space.wrap_float(100.0)) + a.store(space, 1, space.wrap_float(200.0)) + a.store(space, 3, space.wrap_float(300.0)) + check_arr(a, [100.0, 200.0, w_nil, 300.0, w_nil]) + +def test_Float_delete(): + a = float_arr(5) + a.store(space, 1, space.wrap_float(1)) + a.store(space, 1, w_nil) + check_arr(a, [1.2, w_nil, w_nil, w_nil, w_nil]) + +def test_Float_to_List(): + a = float_arr(5) + a.store(space, 1, arr(1)) + assert isinstance(a.strategy, strategies.ListStorageStrategy) + + \ No newline at end of file _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit