return function()local v=game:GetService("\082\101\112\108\105\099\097\116\101\100\083\116\111\114\097\103\101")local h=v.Packages local B=require(h.Llama)local k=B.None local c=B.List local E=c.copyDeep it("\115\104\111\117\108\100 \118\097\108\105\100\097\116\101 \116\121\112\101\115",function()local v,h=pcall(function()E(0)end);(expect(string.find(h,"\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 v={};(expect(E(v))).never.to.equal(v)end)it("\115\104\111\117\108\100 \110\111\116 \114\101\109\111\118\101 \118\097\108\117\101\115 \115\101\116 \116\111 \078\111\110\101",function()local v={"\102\111\111";k}local h=E(v);(expect(h[2])).to.equal(k)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 v={"\102\111\111";"\098\097\114"}local h=0 setmetatable(v,{__newindex=function()h=h+1 end})E(v);(expect(h)).to.equal(0)end)it("\115\104\111\117\108\100 \097\099\099\101\112\116 \111\110\101 \040\111\114 \109\111\114\101\041 \116\097\098\108\101\115",function()(expect(function()E({})end)).never.to.throw();(expect(function()E()end)).to.throw()end)it("\115\104\111\117\108\100 \099\111\112\121 \116\104\101 \116\097\098\108\101",function()local v={"\102\111\111","\098\097\114","\098\097\122"}local h=E(v)for v,B in pairs(v)do(expect(B)).to.equal(h[v])end for h,B in pairs(h)do(expect(B)).to.equal(v[h])end end)it("\115\104\111\117\108\100 \099\111\112\121 \115\117\098\116\097\098\108\101\115",function()local v={"\102\111\111","\098\097\114",{"\098\097\122"}}local h=E(v);(expect(v[3])).never.to.equal(h[3])for v,B in pairs(v[3])do(expect(B)).to.equal(h[3][v])end for h,B in pairs(h[3])do(expect(B)).to.equal(v[3][h])end 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 copyDeep = List.copyDeep

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

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

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

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

	it("should not remove values set to None", function()
		local a = {
			"foo",
			None,
		}

		local b = copyDeep(a)

		expect(b[2]).to.equal(None)
	end)

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

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

		copyDeep(a)

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

	it("should accept one (or more) tables", function()
		expect(function()
			copyDeep({})
		end).never.to.throw()
		expect(function()
			copyDeep()
		end).to.throw()
	end)

	it("should copy the table", function()
		local a = {
			"foo",
			"bar",
			"baz",
		}

		local b = copyDeep(a)

		for k, v in pairs(a) do
			expect(v).to.equal(b[k])
		end

		for k, v in pairs(b) do
			expect(v).to.equal(a[k])
		end
	end)

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

		local b = copyDeep(a)

		expect(a[3]).never.to.equal(b[3])
		
		for k, v in pairs(a[3]) do
			expect(v).to.equal(b[3][k])
		end

		for k, v in pairs(b[3]) do
			expect(v).to.equal(a[3][k])
		end
	end)
end