return function()local b=game:GetService("\082\101\112\108\105\099\097\116\101\100\083\116\111\114\097\103\101")local Q=b.Packages local o=require(Q.Llama)local F=o.None local O=o.Dictionary local z=O.copyDeep it("\115\104\111\117\108\100 \118\097\108\105\100\097\116\101 \116\121\112\101\115",function()local b,Q=pcall(function()z(0)end);(expect(string.find(Q,"\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 b={};(expect(z(b))).never.to.equal(b)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 b=0 local Q={foo=1;bar=2}setmetatable(Q,{__newindex=function()b=b+1 end})z(Q);(expect(b)).to.equal(0)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 b={foo=1;bar=F}local Q=z(b);(expect(Q.bar)).to.equal(F)end)it("\115\104\111\117\108\100 \097\099\099\101\112\116 \049 \040\111\114 \109\111\114\101\041 \116\097\098\108\101\040\115\041",function()(expect(function()z({})end)).never.to.throw();(expect(function()z()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 b={foo=1;bar=2,baz=3}local Q=z(b)for b,o in pairs(b)do(expect(o)).to.equal(Q[b])end for Q,o in pairs(Q)do(expect(o)).to.equal(b[Q])end end)it("\115\104\111\117\108\100 \099\111\112\121 \115\117\098\116\097\098\108\101\115",function()local b={foo=1;bar=2,foobar={baz=3;qux=4}}local Q=z(b);(expect(b.foobar)).never.to.equal(Q.foobar)for b,o in pairs(b.foobar)do(expect(o)).to.equal(Q.foobar[b])end for Q,o in pairs(Q.foobar)do(expect(o)).to.equal(b.foobar[Q])end end)end
return function()
	local ReplicatedStorage = game:GetService("ReplicatedStorage")

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

	local None = Llama.None

	local Dictionary = Llama.Dictionary
	local copyDeep = Dictionary.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 mutate passed in tables", function()
		local mutations = 0

		local a = {
			foo = 1,
			bar = 2,
		}

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

		copyDeep(a)

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

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

		local b = copyDeep(a)

		expect(b.bar).to.equal(None)
	end)

	it("should accept 1 (or more) table(s)", function()
		expect(function()
			copyDeep({})
		end).never.to.throw()
		expect(function()
			copyDeep()
		end).to.throw()
	end)

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

		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 = 1,
			bar = 2,
			foobar = {
				baz = 3,
				qux = 4,
			},
		}

		local b = copyDeep(a)

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

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