mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
	
	
		
			187 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			187 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
|  | const deterministicGrouping = require("../lib/util/deterministicGrouping"); | ||
|  | 
 | ||
|  | describe("deterministicGrouping", () => { | ||
|  | 	const group = (items, minSize, maxSize) => { | ||
|  | 		return deterministicGrouping({ | ||
|  | 			items: items.map((item, i) => [i, item]), | ||
|  | 			minSize, | ||
|  | 			maxSize, | ||
|  | 			getKey: ([key]) => `${100000 + key}`, | ||
|  | 			getSize: ([, size]) => size | ||
|  | 		}).map(group => ({ items: group.items.map(([i]) => i), size: group.size })); | ||
|  | 	}; | ||
|  | 	it("should split large chunks with different size types", () => { | ||
|  | 		expect( | ||
|  | 			group( | ||
|  | 				[{ a: 3, b: 3 }, { b: 1 }, { a: 3 }], | ||
|  | 				{ | ||
|  | 					a: 3, | ||
|  | 					b: 3 | ||
|  | 				}, | ||
|  | 				{ | ||
|  | 					a: 5, | ||
|  | 					b: 5 | ||
|  | 				} | ||
|  | 			) | ||
|  | 		).toMatchInlineSnapshot(`
 | ||
|  | 		Array [ | ||
|  | 		  Object { | ||
|  | 		    "items": Array [ | ||
|  | 		      0, | ||
|  | 		      1, | ||
|  | 		    ], | ||
|  | 		    "size": Object { | ||
|  | 		      "a": 3, | ||
|  | 		      "b": 4, | ||
|  | 		    }, | ||
|  | 		  }, | ||
|  | 		  Object { | ||
|  | 		    "items": Array [ | ||
|  | 		      2, | ||
|  | 		    ], | ||
|  | 		    "size": Object { | ||
|  | 		      "a": 3, | ||
|  | 		    }, | ||
|  | 		  }, | ||
|  | 		] | ||
|  | 	`);
 | ||
|  | 	}); | ||
|  | 	it("should separate items with different size types when unsplittable", () => { | ||
|  | 		expect( | ||
|  | 			group( | ||
|  | 				[ | ||
|  | 					{ a: 1 }, | ||
|  | 					{ b: 1 }, | ||
|  | 					{ a: 1 }, | ||
|  | 					{ a: 1 }, | ||
|  | 					{ b: 1 }, | ||
|  | 					{ a: 1 }, | ||
|  | 					{ a: 1 }, | ||
|  | 					{ b: 1 }, | ||
|  | 					{ a: 1 }, | ||
|  | 					{ a: 1 } | ||
|  | 				], | ||
|  | 				{ | ||
|  | 					a: 3, | ||
|  | 					b: 3 | ||
|  | 				}, | ||
|  | 				{ | ||
|  | 					a: 5, | ||
|  | 					b: 5 | ||
|  | 				} | ||
|  | 			) | ||
|  | 		).toMatchInlineSnapshot(`
 | ||
|  | 		Array [ | ||
|  | 		  Object { | ||
|  | 		    "items": Array [ | ||
|  | 		      0, | ||
|  | 		      2, | ||
|  | 		      3, | ||
|  | 		    ], | ||
|  | 		    "size": Object { | ||
|  | 		      "a": 3, | ||
|  | 		    }, | ||
|  | 		  }, | ||
|  | 		  Object { | ||
|  | 		    "items": Array [ | ||
|  | 		      1, | ||
|  | 		      4, | ||
|  | 		      7, | ||
|  | 		    ], | ||
|  | 		    "size": Object { | ||
|  | 		      "b": 3, | ||
|  | 		    }, | ||
|  | 		  }, | ||
|  | 		  Object { | ||
|  | 		    "items": Array [ | ||
|  | 		      5, | ||
|  | 		      6, | ||
|  | 		      8, | ||
|  | 		      9, | ||
|  | 		    ], | ||
|  | 		    "size": Object { | ||
|  | 		      "a": 4, | ||
|  | 		    }, | ||
|  | 		  }, | ||
|  | 		] | ||
|  | 	`);
 | ||
|  | 	}); | ||
|  | 	it("should handle entangled size types (case 1)", () => { | ||
|  | 		expect( | ||
|  | 			group( | ||
|  | 				[ | ||
|  | 					{ c: 2, b: 2 }, | ||
|  | 					{ a: 2, c: 2 }, | ||
|  | 					{ a: 2, b: 2 } | ||
|  | 				], | ||
|  | 				{ | ||
|  | 					a: 3, | ||
|  | 					b: 3, | ||
|  | 					c: 3 | ||
|  | 				}, | ||
|  | 				{ | ||
|  | 					a: 3, | ||
|  | 					b: 3, | ||
|  | 					c: 3 | ||
|  | 				} | ||
|  | 			) | ||
|  | 		).toMatchInlineSnapshot(`
 | ||
|  | 		Array [ | ||
|  | 		  Object { | ||
|  | 		    "items": Array [ | ||
|  | 		      0, | ||
|  | 		      1, | ||
|  | 		      2, | ||
|  | 		    ], | ||
|  | 		    "size": Object { | ||
|  | 		      "a": 4, | ||
|  | 		      "b": 4, | ||
|  | 		      "c": 4, | ||
|  | 		    }, | ||
|  | 		  }, | ||
|  | 		] | ||
|  | 	`);
 | ||
|  | 	}); | ||
|  | 	it("should handle entangled size types (case 2)", () => { | ||
|  | 		expect( | ||
|  | 			group( | ||
|  | 				[ | ||
|  | 					{ c: 2, b: 2 }, | ||
|  | 					{ a: 2, c: 2 }, | ||
|  | 					{ a: 2, b: 2 } | ||
|  | 				], | ||
|  | 				{ | ||
|  | 					a: 3, | ||
|  | 					b: 3 | ||
|  | 				}, | ||
|  | 				{ | ||
|  | 					c: 3 | ||
|  | 				} | ||
|  | 			) | ||
|  | 		).toMatchInlineSnapshot(`
 | ||
|  | 		Array [ | ||
|  | 		  Object { | ||
|  | 		    "items": Array [ | ||
|  | 		      0, | ||
|  | 		      2, | ||
|  | 		    ], | ||
|  | 		    "size": Object { | ||
|  | 		      "a": 2, | ||
|  | 		      "b": 4, | ||
|  | 		      "c": 2, | ||
|  | 		    }, | ||
|  | 		  }, | ||
|  | 		  Object { | ||
|  | 		    "items": Array [ | ||
|  | 		      1, | ||
|  | 		    ], | ||
|  | 		    "size": Object { | ||
|  | 		      "a": 2, | ||
|  | 		      "c": 2, | ||
|  | 		    }, | ||
|  | 		  }, | ||
|  | 		] | ||
|  | 	`);
 | ||
|  | 	}); | ||
|  | }); |