return function()local f=require(script.Parent)it("\115\104\111\117\108\100 \098\101 \097 \116\097\098\108\101",function()(expect(f)).to.be.a("\116\097\098\108\101")end)it("\115\104\111\117\108\100 \110\111\116 \099\111\110\116\097\105\110 \097 \109\101\116\097\116\097\098\108\101",function()(expect(getmetatable(f))).to.equal(nil)end)it("\115\104\111\117\108\100 \116\104\114\111\119 \097\110 \101\114\114\111\114 \111\110 \097\116\116\101\109\112\116 \116\111 \109\111\100\105\102\121 \116\104\101 \101\120\112\111\114\116 \116\097\098\108\101",function()(expect(function()f.NEW_FIELD={}end)).to.throw();(expect(function()setmetatable(f,{})end)).to.throw()end)it("\115\104\111\117\108\100 \101\120\112\111\115\101 \107\110\111\119\110 \065\080\073\115",function()local j={assign="\102\117\110\099\116\105\111\110";copy="\102\117\110\099\116\105\111\110";deepFreeze="\102\117\110\099\116\105\111\110";deepSafeFreeze="\102\117\110\099\116\105\111\110";every="\102\117\110\099\116\105\111\110",extend="\102\117\110\099\116\105\111\110",filter="\102\117\110\099\116\105\111\110";filterArray="\102\117\110\099\116\105\111\110",find="\102\117\110\099\116\105\111\110";join="\102\117\110\099\116\105\111\110",joinArray="\102\117\110\099\116\105\111\110",keys="\102\117\110\099\116\105\111\110";length="\102\117\110\099\116\105\111\110";map="\102\117\110\099\116\105\111\110";random="\102\117\110\099\116\105\111\110";reverse="\102\117\110\099\116\105\111\110";safeFreeze="\102\117\110\099\116\105\111\110",shuffle="\102\117\110\099\116\105\111\110";some="\102\117\110\099\116\105\111\110";values="\102\117\110\099\116\105\111\110"};(expect(function()for f,J in f do assert(j[f]~=nil)assert(type(J)==j[f])end end)).never.throw()end)end
return function()
	local TableUtils = require(script.Parent)

	it("should be a table", function()
		expect(TableUtils).to.be.a("table")
	end)

	it("should not contain a metatable", function()
		expect(getmetatable(TableUtils)).to.equal(nil)
	end)

	it("should throw an error on attempt to modify the export table", function()
		expect(function()
			TableUtils.NEW_FIELD = {}
		end).to.throw()

		expect(function()
			setmetatable(TableUtils, {})
		end).to.throw()
	end)

	it("should expose known APIs", function()
		local knownAPIs = {
			assign = "function",
			copy = "function",
			deepFreeze = "function",
			deepSafeFreeze = "function",
			every = "function",
			extend = "function",
			filter = "function",
			filterArray = "function",
			find = "function",
			join = "function",
			joinArray = "function",
			keys = "function",
			length = "function",
			map = "function",
			random = "function",
			reverse = "function",
			safeFreeze = "function",
			shuffle = "function",
			some = "function",
			values = "function",
		}

		expect(function()
			for key, value in TableUtils do
				assert(knownAPIs[key] ~= nil)
				assert(type(value) == knownAPIs[key])
			end
		end).never.throw()
	end)
end
