return function()local d=game:GetService("\082\101\112\108\105\099\097\116\101\100\083\116\111\114\097\103\101")local S=d.Packages local E=require(S.Llama)local P=E.None local V=E.List local f=V.zipAll it("\115\104\111\117\108\100 \118\097\108\105\100\097\116\101 \116\121\112\101\115",function()local d,S=pcall(function()f(0)end);(expect(string.find(S,"\101\120\112\101\099\116\101\100\044 \103\111\116"))).to.be.ok()end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \097 \110\101\119 \116\097\098\108\101",function()local d={};(expect(f(d,{}))).never.to.equal(d)end)it("\115\104\111\117\108\100 \110\111\116 \109\117\116\097\116\101 \112\097\115\115\101\100 \105\110 \116\097\098\108\101\115",function()local d={1,2;3}local S={4;5;6}local E=0 local P=0 setmetatable(d,{__newindex=function()E=E+1 end})setmetatable(S,{__newindex=function()P=P+1 end})f(d,S);(expect(E)).to.equal(0);(expect(P)).to.equal(0)end)it("\115\104\111\117\108\100 \122\105\112 \116\104\101 \112\114\111\118\105\100\101\100 \116\097\098\108\101\115 \116\111\103\101\116\104\101\114",function()local d={{1;2,3};{"\097","\098","\099"},{"\102\111\111";"\098\097\114";"\098\097\122"}}local S=f(d[1],d[2],d[3])for S,E in pairs(S)do for E,P in pairs(E)do(expect(P)).to.equal(d[E][S])end end end)it("\115\104\111\117\108\100 \122\105\112 \097\115 \109\117\099\104 \097\115 \112\111\115\115\105\098\108\101\044 \114\101\112\108\097\099\105\110\103 \110\111\110 \101\120\105\115\116\097\110\116 \101\110\116\114\105\101\115 \119\105\116\104 \078\111\110\101",function()local d={1,2;3}local S={4;5}local E=f(d,S);(expect(E[3][1])).to.equal(3);(expect(E[3][2])).to.equal(P)end)end
return function()
	local ReplicatedStorage = game:GetService("ReplicatedStorage")

	local Packages = ReplicatedStorage.Packages
	local Llama = require(Packages.Llama)

	local None = Llama.None

	local List = Llama.List
	local zipAll = List.zipAll

	it("should validate types", function()
		local _, err = pcall(function()
			zipAll(0)
		end)

		expect(string.find(err, "expected, got")).to.be.ok()
	end)

	it("should return a new table", function()
		local a = {}

		expect(zipAll(a, {})).never.to.equal(a)
	end)
	
	it("should not mutate passed in tables", function()
		local a = { 1, 2, 3 }
		local b = { 4, 5, 6 }
		local mutationsA = 0
		local mutationsB = 0

		setmetatable(a, {
			__newindex = function()
				mutationsA = mutationsA + 1
			end
		})

		setmetatable(b, {
			__newindex = function()
				mutationsB = mutationsB + 1
			end
		})

		zipAll(a, b)

		expect(mutationsA).to.equal(0)
		expect(mutationsB).to.equal(0)
	end)

	it("should zip the provided tables together", function()
		local unzipped = {
			{ 1, 2, 3 },
			{ 'a', 'b', 'c' },
			{ "foo", "bar", "baz" },
		}
		local zipped = zipAll(unzipped[1], unzipped[2], unzipped[3])

		for k, v in pairs(zipped) do
			for l, w in pairs(v) do
				expect(w).to.equal(unzipped[l][k])
			end
		end
	end)

	it("should zip as much as possible, replacing non existant entries with None", function()
		local a = { 1, 2, 3 }
		local b = { 4, 5 }
		local zipped = zipAll(a, b)

		expect(zipped[3][1]).to.equal(3)
		expect(zipped[3][2]).to.equal(None)
	end)
end