import pytest from easydict import EasyDict import numpy as np import gym from copy import deepcopy from ding.envs.env import check_array_space, check_different_memory, check_all, demonstrate_correct_procedure from ding.envs.env.tests import DemoEnv @pytest.mark.unittest def test_an_implemented_env(): demo_env = DemoEnv({}) check_all(demo_env) demonstrate_correct_procedure(DemoEnv) @pytest.mark.unittest def test_check_array_space(): seq_array = (np.array([1, 2, 3], dtype=np.int64), np.array([4., 5., 6.], dtype=np.float32)) seq_space = [gym.spaces.Box(low=0, high=10, shape=(3, ), dtype=np.int64) for _ in range(2)] with pytest.raises(AssertionError): check_array_space(seq_array, seq_space, 'test_sequence') dict_array = {'a': np.array([1, 2, 3], dtype=np.int64), 'b': np.array([4., 5., 6.], dtype=np.float32)} int_box = gym.spaces.Box(low=0, high=10, shape=(3, ), dtype=np.int64) dict_space = {'a': deepcopy(int_box), 'b': deepcopy(int_box)} with pytest.raises(AssertionError): check_array_space(dict_array, dict_space, 'test_dict') with pytest.raises(TypeError): check_array_space(1, dict_space, 'test_type_error') @pytest.mark.unittest def test_check_different_memory(): int_seq = np.array([1, 2, 3], dtype=np.int64) seq_array1 = (int_seq, np.array([4., 5., 6.], dtype=np.float32)) seq_array2 = (int_seq, np.array([4., 5., 6.], dtype=np.float32)) with pytest.raises(AssertionError): check_different_memory(seq_array1, seq_array2, -1) dict_array1 = {'a': np.array([4., 5., 6.], dtype=np.float32), 'b': int_seq} dict_array2 = {'a': np.array([4., 5., 6.], dtype=np.float32), 'b': int_seq} with pytest.raises(AssertionError): check_different_memory(dict_array1, dict_array2, -1) with pytest.raises(AssertionError): check_different_memory(1, dict_array1, -1) with pytest.raises(TypeError): check_different_memory(1, 2, -1)