import { Box, Point } from './box.model'
describe('Box', () => {
	describe('intersects method', () => {
		it.each([
			[new Box(new Point(0, 0), new Point(2, 2)), new Box(new Point(1, 1), new Point(3, 3))],
			[new Box(new Point(0, 0), new Point(2, 2)), new Box(new Point(0, 1), new Point(3, 3))],
			[new Box(new Point(0, 1), new Point(3, 3)), new Box(new Point(2, 2), new Point(4, 4))],
		])('should return true if the boxes intersect', (box1, box2) => {
			expect(box1.intersects(box2)).toBe(true)
		})
		it.each([
			[new Box(new Point(0, 0), new Point(2, 2)), new Box(new Point(2, 2), new Point(4, 4))],
			[new Box(new Point(0, 0), new Point(2, 2)), new Box(new Point(3, 3), new Point(4, 4))],
			[new Box(new Point(5, 5), new Point(7, 7)), new Box(new Point(3, 3), new Point(4, 4))],
			[new Box(new Point(0, 0), new Point(2, 2)), new Box(new Point(5, 5), new Point(7, 7))],
		])('should return false if the boxes do not intersect', (box1, box2) => {
			expect(box1.intersects(box2)).toBe(false)
		})
	})
	describe('getAllPositions method', () => {
		it.each([
			[
				new Box(new Point(0, 0), new Point(2, 2)),
				[
					new Point(0, 0),
					new Point(0, 1),
					new Point(0, 2),
					new Point(1, 0),
					new Point(1, 1),
					new Point(1, 2),
					new Point(2, 0),
					new Point(2, 1),
					new Point(2, 2),
				],
			],
			[
				new Box(new Point(1, 1), new Point(3, 2)),
				[new Point(1, 1), new Point(1, 2), new Point(2, 1), new Point(2, 2), new Point(3, 1), new Point(3, 2)],
			],
			[new Box(new Point(2, 2), new Point(3, 3)), [new Point(2, 2), new Point(2, 3), new Point(3, 2), new Point(3, 3)]],
		])('should return all positions the box occupies inside the grid', (box, positions) => {
			expect(box.getAllPositions()).toEqual(new Set(positions))
		})
	})
})
