return function()local U=game:GetService("\082\101\112\108\105\099\097\116\101\100\083\116\111\114\097\103\101")local s=U.Packages local H=require(s.Llama)local X=H.None local Y=H.List local B=Y.concatDeep it("\115\104\111\117\108\100 \118\097\108\105\100\097\116\101 \116\121\112\101\115",function()local U={{0},{{},0}}for s=1,#U,1 do local H,X=pcall(function()B(unpack(U[s]))end);(expect(string.find(X,"\101\120\112\101\099\116\101\100\044 \103\111\116"))).to.be.ok()end 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 U={};(expect(B(U))).never.to.equal(U)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 U={"\102\111\111";"\098\097\114"}local s=0 setmetatable(U,{__newindex=function()s=s+1 end})B(U);(expect(s)).to.equal(0)end)it("\115\104\111\117\108\100 \114\101\109\111\118\101 \101\108\101\109\101\110\116\115 \101\113\117\097\108 \116\111 \078\111\110\101",function()local U={"\102\111\111-\097"}local s={X;"\102\111\111-\098"}local H=B(U,s);(expect(#H)).to.equal(2);(expect(H[1])).to.equal("\102\111\111-\097");(expect(H[2])).to.equal("\102\111\111-\098")end)it("\115\104\111\117\108\100 \097\099\099\101\112\116 \097\114\098\105\116\114\097\114\121 \110\117\109\098\101\114\115 \111\102 \116\097\098\108\101\115",function()local U={1}local s={2}local H={3}local X=B(U,s,H);(expect(#X)).to.equal(3);(expect(X[1])).to.equal(1);(expect(X[2])).to.equal(2);(expect(X[3])).to.equal(3)end)it("\115\104\111\117\108\100 \097\099\099\101\112\116 \122\101\114\111 \116\097\098\108\101\115",function()(expect(B())).to.be.a("\116\097\098\108\101")end)it("\115\104\111\117\108\100 \097\099\099\101\112\116 \104\111\108\101\115 \105\110 \097\114\103\117\109\101\110\116\115",function()local U={1}local s={2}local H=B(U,nil,s);(expect(#H)).to.equal(2);(expect(H[1])).to.equal(1);(expect(H[2])).to.equal(2)local X=B(nil,U,s);(expect(#X)).to.equal(2);(expect(X[1])).to.equal(1);(expect(X[2])).to.equal(2)end)it("\115\104\111\117\108\100 \106\111\105\110 \116\097\098\108\101\115 \097\110\100 \099\111\112\121 \115\117\098\116\097\098\108\101\115",function()local U={"\102\111\111-\097",{"\098\097\114-\097",{"\098\097\122-\097"}}}local s={"\102\111\111-\098",{"\098\097\114-\098";{"\098\097\122-\098"}}}local H=B(U,s);(expect(H[1])).to.equal(U[1]);(expect(H[2])).never.to.equal(U[2]);(expect(H[3])).to.equal(s[1]);(expect(H[4])).never.to.equal(s[2]);(expect(H[2][1])).to.equal(U[2][1]);(expect(H[2][2])).never.to.equal(U[2][2]);(expect(H[4][1])).to.equal(s[2][1]);(expect(H[4][2])).never.to.equal(s[2][2]);(expect(H[2][2][1])).to.equal(U[2][2][1]);(expect(H[4][2][1])).to.equal(s[2][2][1])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 concatDeep = List.concatDeep

	it("should validate types", function()
		local args = {
			{ 0 },
			{ {}, 0 },
		}

		for i = 1, #args do
			local _, err = pcall(function()
				concatDeep(unpack(args[i]))
			end)

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

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

		expect(concatDeep(a)).never.to.equal(a)
	end)

	it("should not mutate passed in tables", function()
		local a = { "foo", "bar" }
		local mutations = 0

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

		concatDeep(a)

		expect(mutations).to.equal(0)
	end)

	it("should remove elements equal to None", function()
		local a = {
			"foo-a"
		}

		local b = {
			None,
			"foo-b"
		}

		local c = concatDeep(a, b)

		expect(#c).to.equal(2)
		expect(c[1]).to.equal("foo-a")
		expect(c[2]).to.equal("foo-b")
	end)

	it("should accept arbitrary numbers of tables", function()
		local a = { 1 }
		local b = { 2 }
		local c = { 3 }

		local d = concatDeep(a, b, c)

		expect(#d).to.equal(3)
		expect(d[1]).to.equal(1)
		expect(d[2]).to.equal(2)
		expect(d[3]).to.equal(3)
	end)

	it("should accept zero tables", function()
		expect(concatDeep()).to.be.a("table")
	end)

	it("should accept holes in arguments", function()
		local a = { 1 }
		local b = { 2 }

		local c = concatDeep(a, nil, b)

		expect(#c).to.equal(2)
		expect(c[1]).to.equal(1)
		expect(c[2]).to.equal(2)

		local d = concatDeep(nil, a, b)

		expect(#d).to.equal(2)
		expect(d[1]).to.equal(1)
		expect(d[2]).to.equal(2)
	end)

	it("should join tables and copy subtables", function()
		local a = {
			"foo-a",
			{
				"bar-a",
				{
					"baz-a"
				}
			}
		}

		local b = {
			"foo-b",
			{
				"bar-b",
				{
					"baz-b"
				}
			}
		}

		local c = concatDeep(a, b)

		expect(c[1]).to.equal(a[1])
		expect(c[2]).never.to.equal(a[2])
		expect(c[3]).to.equal(b[1])
		expect(c[4]).never.to.equal(b[2])

		expect(c[2][1]).to.equal(a[2][1])
		expect(c[2][2]).never.to.equal(a[2][2])
		expect(c[4][1]).to.equal(b[2][1])
		expect(c[4][2]).never.to.equal(b[2][2])
		
		expect(c[2][2][1]).to.equal(a[2][2][1])
		expect(c[4][2][1]).to.equal(b[2][2][1])
	end)
end