function testPolygonPolygon(a, polyA, b, polyB, response) {
	// specific point for
	const aPoints = polyA.points;
	const aNormals = polyA.normals;
	const aLen = aNormals.length;
	const bPoints = polyB.points;
	const bNormals = polyB.normals;
	const bLen = bNormals.length;
	// aboslute shape position
	const posA = T_VECTORS.pop()
		.copy(a.pos)
		.add(a.ancestor.getAbsolutePosition())
		.add(polyA.pos);
	const posB = T_VECTORS.pop()
		.copy(b.pos)
		.add(b.ancestor.getAbsolutePosition())
		.add(polyB.pos);

	// If any of the edge normals of A is a separating axis, no intersection.
	for (let i = 0; i < aLen; i++) {
		if (isSeparatingAxis(posA, posB, aPoints, bPoints, aNormals[i], response)) {
			T_VECTORS.push(posA);
			T_VECTORS.push(posB);
			return false;
		}
	}

	// If any of the edge normals of B is a separating axis, no intersection.
	for (let i = 0; i < bLen; i++) {
		if (isSeparatingAxis(posA, posB, aPoints, bPoints, bNormals[i], response)) {
			T_VECTORS.push(posA);
			T_VECTORS.push(posB);
			return false;
		}
	}

	// Since none of the edge normals of A or B are a separating axis, there is an intersection
	// and we've already calculated the smallest overlap (in isSeparatingAxis).  Calculate the
	// final overlap vector.
	if (response) {
		response.a = a;
		response.b = b;
		response.overlapV.copy(response.overlapN).scale(response.overlap);
	}
	T_VECTORS.push(posA);
	T_VECTORS.push(posB);
	return true;
}
Checks whether polygons collide.
@ignore
@param {Renderable|Container|Entity|Sprite|NineSliceSprite} a - a reference to the object A.
@param {Polygon} polyA - a reference to the object A Polygon to be tested
@param {Renderable|Container|Entity|Sprite|NineSliceSprite} b - a reference to the object B.
@param {Polygon} polyB - a reference to the object B Polygon to be tested
@param {Response=} response - Response object (optional) that will be populated if they intersect.
@returns {boolean} true if they intersect, false if they don't.