def test_get_ids_in_region_single_cube(self): """Test single cuboid using DynamoDB index.""" cube_dim_tuple = (self.x_dim, self.y_dim, self.z_dim) cube1 = Cube.create_cube(self.resource, [self.x_dim, self.y_dim, self.z_dim]) cube1.zeros() cube1.data[0][0][40][0] = 55555 cube1.data[0][0][50][0] = 66666000000000 pos1 = [2*self.x_dim, 3*self.y_dim, 2*self.z_dim] cube1.morton_id = XYZMorton(pos1) sp = SpatialDB(self.kvio_config, self.state_config, self.object_store_config) resolution = 0 sp.write_cuboid(self.resource, pos1, resolution, cube1.data, time_sample_start=0) # Make sure cube write complete and correct. actual_cube = sp.cutout(self.resource, pos1, cube_dim_tuple, resolution) np.testing.assert_array_equal(cube1.data, actual_cube.data) corner = (2*self.x_dim, 3*self.y_dim, 2*self.z_dim) extent = (self.x_dim, self.y_dim, self.z_dim) t_range = [0, 1] version = 0 expected = ['55555', '66666000000000'] # Method under test. actual = sp.get_ids_in_region( self.resource, resolution, corner, extent, t_range, version) self.assertIn('ids', actual) self.assertCountEqual(expected, actual['ids'])
def test_get_ids_in_region_multiple_cubes_and_x_partials(self): """ Region has some full cuboids and some partial cuboids along the x axis. """ cube_dim_tuple = (self.x_dim, self.y_dim, self.z_dim) cube1 = Cube.create_cube(self.resource, [self.x_dim, self.y_dim, self.z_dim]) cube1.zeros() cube1.data[0][0][40][105] = 55555 cube1.data[0][0][50][105] = 66666 pos1 = [7*self.x_dim, 5*self.y_dim, 2*self.z_dim] cube1.morton_id = XYZMorton(pos1) cube2 = Cube.create_cube(self.resource, [self.x_dim, self.y_dim, self.z_dim]) cube2.zeros() cube2.data[0][0][40][105] = 55555 cube2.data[0][0][50][105] = 77777 pos2 = [8*self.x_dim, 5*self.y_dim, 2*self.z_dim] cube2.morton_id = XYZMorton(pos2) cube3 = Cube.create_cube(self.resource, [self.x_dim, self.y_dim, self.z_dim]) cube3.zeros() cube3.data[0][0][0][105] = 88888 pos3 = [9*self.x_dim, 5*self.y_dim, 2*self.z_dim] cube3.morton_id = XYZMorton(pos3) sp = SpatialDB(self.kvio_config, self.state_config, self.object_store_config) resolution = 0 sp.write_cuboid(self.resource, pos1, resolution, cube1.data, time_sample_start=0) sp.write_cuboid(self.resource, pos2, resolution, cube2.data, time_sample_start=0) sp.write_cuboid(self.resource, pos3, resolution, cube3.data, time_sample_start=0) # Make sure cube write complete and correct. actual_cube = sp.cutout(self.resource, pos1, cube_dim_tuple, resolution) np.testing.assert_array_equal(cube1.data, actual_cube.data) actual_cube = sp.cutout(self.resource, pos2, cube_dim_tuple, resolution) np.testing.assert_array_equal(cube2.data, actual_cube.data) actual_cube = sp.cutout(self.resource, pos3, cube_dim_tuple, resolution) np.testing.assert_array_equal(cube3.data, actual_cube.data) corner = (7*self.x_dim+100, 5*self.y_dim, 2*self.z_dim) extent = (2*self.x_dim+self.x_dim//2, self.y_dim, self.z_dim) t_range = [0, 1] version = 0 expected = ['55555', '66666', '77777', '88888'] # Method under test. actual = sp.get_ids_in_region( self.resource, resolution, corner, extent, t_range, version) self.assertIn('ids', actual) self.assertCountEqual(expected, actual['ids'])
def test_get_ids_in_region_multiple_partial_cubes(self): """ Region cuboid aligned in x, but doesn't span full cuboids in the y and z. """ cube1 = Cube.create_cube(self.resource, [self.x_dim, self.y_dim, self.z_dim]) cube1.zeros() cube1.data[0][0][40][0] = 55555 cube1.data[0][0][50][0] = 66666 pos1 = [4*self.x_dim, 4*self.y_dim, 2*self.z_dim] cube1.morton_id = XYZMorton(pos1) cube2 = Cube.create_cube(self.resource, [self.x_dim, self.y_dim, self.z_dim]) cube2.zeros() cube2.data[0][0][40][0] = 55555 cube2.data[0][0][50][0] = 77777 pos2 = [5*self.x_dim, 4*self.y_dim, 2*self.z_dim] cube2.morton_id = XYZMorton(pos2) sp = SpatialDB(self.kvio_config, self.state_config, self.object_store_config) resolution = 0 sp.write_cuboid(self.resource, pos1, resolution, cube1.data, time_sample_start=0) sp.write_cuboid(self.resource, pos2, resolution, cube2.data, time_sample_start=0) # Not verifying writes here because get_ids_in_region() should be doing # cutouts due to the region not containing full cuboids. corner = (4*self.x_dim, 4*self.y_dim, 2*self.z_dim) extent = (2*self.x_dim, 60, 10) t_range = [0, 1] version = 0 expected = ['55555', '66666', '77777'] # Method under test. actual = sp.get_ids_in_region( self.resource, resolution, corner, extent, t_range, version) self.assertIn('ids', actual) self.assertCountEqual(expected, actual['ids'])