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());
    }