public static void Main()
    {
        // item 233
        Bar db = new Bar();

        // item 160
        Bar.ICompany yellow = db.InsertCompany(0);
        Bar.ICompany grey   = db.InsertCompany(0);
        // item 161
        Bar.IDepartment yellow_m = db.InsertDepartment(0, "Yellow marketing");
        Bar.IDepartment grey_m   = db.InsertDepartment(0, "Grey marketing");
        // item 162
        Bar.IEmployee grey_e  = db.InsertEmployee(0, "Mark", grey_m);
        Bar.IEmployee grey_e2 = db.InsertEmployee(0, "John", null);
        // item 178
        ExpectException(() => db.InsertEmployee(0, "Mark", grey_m));
        // item 163
        var fake = new FakeDepartment {
            Id = 1000, Title = "Fake"
        };

        ExpectException(() => db.InsertEmployee(0, "Jack", fake));
        // item 164
        db.SetCompanyMarketing(yellow, yellow_m);
        db.SetCompanyMarketing(grey, grey_m);
        // item 165
        db.SetEmployeeDepartment(grey_e2, grey_m);
        // item 169
        Equal(yellow_m, db.GetDepartment(yellow_m.Id));
        // item 166
        ExpectException(() => db.DeleteDepartment(yellow_m));
        // item 167
        db.DeleteCompany(yellow);
        // item 168
        Equal(null, db.GetDepartment(yellow_m.Id));
        Equal(null, db.GetCompany(yellow.Id));
        // item 170
        ExpectException(() => db.DeleteCompany(grey));
        // item 171
        db.SetEmployeeDepartment(grey_e, null);
        // item 172
        db.DeleteEmployee(grey_e2);
        // item 173
        db.DeleteCompany(grey);
        // item 174
        Equal(null, db.GetCompany(grey.Id));
        Equal(null, db.GetDepartment(grey_m.Id));
    }
    public static void Main()
    {
        // item 251
        Bar db = new Bar();

        // item 252
        Bar.IDepartment yellow_m = db.InsertDepartment(0, "Yellow marketing");
        Bar.IDepartment grey_m   = db.InsertDepartment(0, "Grey marketing");
        // item 253
        Bar.IEmployee mark  = db.InsertEmployee(10, "Mark");
        Bar.IEmployee john  = db.InsertEmployee(20, "John");
        Bar.IEmployee scott = db.InsertEmployee(30, "Scott");
        // item 188
        db.AddToDepartmentEmployees(yellow_m, mark);
        // item 238
        db.AddToDepartmentEmployees(yellow_m, null);
        // item 213
        var fake = new FakeEmployee {
            Id = 800, Name = "fake"
        };

        ExpectException(() => db.AddToDepartmentEmployees(yellow_m, fake));
        // item 212
        db.AddToDepartmentEmployees(grey_m, mark);
        db.AddToDepartmentEmployees(grey_m, john);
        db.AddToDepartmentEmployees(grey_m, scott);
        // item 254
        var grey_employees = (
            from e in grey_m.Employees
            select e.Id).ToList();
        var yellow_employees = (
            from e in yellow_m.Employees
            select e.Id).ToList();

        grey_employees.Sort();
        yellow_employees.Sort();
        // item 255
        Equal(new int[] { 10, 20, 30 }, grey_employees);
        Equal(new int[] { 10 }, yellow_employees);
        // item 256
        Equal(new Bar.IDepartment[] { yellow_m, grey_m }, mark.Departments);
        Equal(new Bar.IDepartment[] { grey_m }, john.Departments);
        Equal(new Bar.IDepartment[] { grey_m }, scott.Departments);
        // item 227
        Bar.ICompany company = db.InsertCompany(800);
        // item 228
        db.SetEmployeeCompany(mark, company);
        db.SetEmployeeCompany(john, company);
        db.SetEmployeeCompany(scott, company);
        // item 302
        db.SetDepartmentCompany(grey_m, company);
        db.SetDepartmentCompany(yellow_m, company);
        // item 230
        db.RemoveFromDepartmentEmployees(yellow_m, mark);
        // item 231
        db.RemoveFromDepartmentEmployees(grey_m, mark);
        db.RemoveFromDepartmentEmployees(grey_m, john);
        db.RemoveFromDepartmentEmployees(grey_m, scott);
        // item 232
        Equal(0, grey_m.Employees.Count);
        Equal(0, yellow_m.Employees.Count);
        // item 233
        Equal(0, mark.Departments.Count);
        Equal(0, john.Departments.Count);
        Equal(0, scott.Departments.Count);
        // item 234
        db.AddToDepartmentEmployees(yellow_m, john);
        // item 303
        db.AddToDepartmentEmployees(grey_m, mark);
        db.AddToDepartmentEmployees(grey_m, john);
        db.AddToDepartmentEmployees(grey_m, scott);
        // item 236
        Equal(new Bar.IEmployee[] { mark, john, scott }, grey_m.Employees);
        Equal(new Bar.IEmployee[] { john }, yellow_m.Employees);
        // item 237
        Equal(new Bar.IDepartment[] { yellow_m, grey_m }, john.Departments);
        Equal(new Bar.IDepartment[] { grey_m }, mark.Departments);
        Equal(new Bar.IDepartment[] { grey_m }, scott.Departments);
        // item 239
        db.DeleteEmployee(scott);
        // item 240
        Equal(new Bar.IEmployee[] { mark, john }, grey_m.Employees);
        // item 241
        db.DeleteDepartment(yellow_m);
        // item 242
        Equal(new Bar.IDepartment[] { grey_m }, john.Departments);
        // item 243
        db.DeleteCompany(company);
        // item 244
        Equal(0, db.EmployeeCount());
        Equal(0, db.DepartmentCount());
    }