local o = obj.new("rock"); o:placeobj(u.ux, u.uy); local o2 = obj.at(u.ux, u.uy); local o2tbl = o2:totable(); if (o2tbl.otyp_name ~= "rock") then error("no rock under you"); end local box = obj.new("empty large box"); local boxtbl = box:totable(); if (boxtbl.has_contents ~= 0) then error("empty box has contents"); end box:addcontent(obj.new("diamond")); boxtbl = box:totable(); if (boxtbl.has_contents ~= 1) then error("box has no contents"); end local diamond = box:contents():totable(); if (diamond.otyp_name ~= "diamond") then error("box contents is not a diamond"); end box:placeobj(u.ux, u.uy); local o3 = obj.at(u.ux, u.uy); local o3tbl = o3:totable(); if (o3tbl.otyp_name ~= "large box") then error("no large box under you"); end local o4 = o3:next(); local o4tbl = o4:totable(); if (o4tbl.otyp_name ~= "rock") then error("no rock under the large box"); end local oc = obj.class(o4tbl.otyp); if (oc.name ~= "rock") then error("object class is not rock, part 1"); end if (oc.class ~= "*") then error("object class is not *, part 1"); end local oc2 = obj.class(o); if (oc2.name ~= "rock") then error("object class is not rock, part 2"); end if (oc2.class ~= "*") then error("object class is not *, part 2"); end local oc3 = obj.class(obj.new("rock")); if (oc3.name ~= "rock") then error("object class is not rock, part 3"); end if (oc3.class ~= "*") then error("object class is not *, part 3"); end