public void Die_With_0_Live_Neighbours() { var neighbours = new Neighbours(); var cell = new LiveCell(neighbours); var cellState = cell.Tick(); Assert.That(cellState, Is.TypeOf <DeadCell>()); }
public void Remain_Live_With_2_Live_Neighbours() { var neighbours = new Neighbours(); neighbours.Add(new LiveCell(null)); neighbours.Add(new LiveCell(null)); var cell = new LiveCell(neighbours); var cellState = cell.Tick(); Assert.That(cellState, Is.TypeOf <LiveCell>()); }
public void Die_With_1_Live_Neighbour_And_1_Dead_Neighbour() { var neighbours = new Neighbours(); neighbours.Add(new LiveCell(null)); neighbours.Add(new DeadCell(null)); var cell = new LiveCell(neighbours); var cellState = cell.Tick(); Assert.That(cellState, Is.TypeOf <DeadCell>()); }
private static IAmACell[] randomGridCells() { var rand = new Random(); var seedCells = new IAmACell[GridWidth*GridHeight]; for (var x = 0; x < GridWidth; x++) for (var y = 0; y < GridHeight; y++) { if (rand.NextDouble() > 0.5) seedCells[x + GridWidth*y] = new LiveCell(x, y); else seedCells[x + GridWidth*y] = new DeadCell(x, y); } return seedCells; }
// TO BE EXECUTED ONLY AFTER ALL users individual spreadsheets gonna get loaded internal async Task AssureUsersDataConsistencyAsync(CancellationToken?token = null) { await Task.Run(() => { // Thread safety lock lock (this.DashboardDataLock) { token.GetValueOrDefault().ThrowIfCancellationRequested(); // Get all users IList <User> users = this._dataRepository.UserRepository.ReadAll(); // Loop through each user foreach (User user in users) { token.GetValueOrDefault().ThrowIfCancellationRequested(); string userSpreadsheetId = this._dataRepository.UserRepository.GetUserLogSpreadsheetId(user.Username); string userSpreadsheetURL = this.GetUrlFromSpreadsheetId(userSpreadsheetId); // Get all the dashboard rows associated with currently looped through user IList <LiveRow> userAssociateRows = this._dashboardSheet.SheetRows.Where((row) => { LiveCell usernameCell = row[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserUsername]; return(usernameCell.GetDataAsString() == user.Username); }).ToList(); // Loop through each user associated rows, compare their user-related content, and update if changes are required. foreach (LiveRow userAssociatedRow in userAssociateRows) { if (userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserFirstName].GetDataAsString() != user.FirstName || userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSurname].GetDataAsString() != user.Surname || userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSpreadsheetURL].GetDataAsString() != userSpreadsheetURL) { userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserFirstName].SetData(user.FirstName); userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSurname].SetData(user.Surname); userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSpreadsheetURL].SetData(userSpreadsheetURL); userAssociatedRow.Upload(this._dataRepository.GoogleService.SpreadsheetsDb); } } } } }); }
private void OnUserSpreadsheetReplaced(object sender, UserSpreadsheetReplacedEventArgs e) { LiveSpreadsheet userSpreadsheet = e.Spreadsheet; LiveSheet metadataSheet = userSpreadsheet[UserRepository.UserLog_Metadata_SheetTitle]; LiveCell usernameMetadataCell = metadataSheet[UserRepository.UserLog_Metadata_UsernameValue_RowIndex][UserRepository.UserLog_Metadata_UsernameValue_ColumnIndex]; LiveCell firstNameMetadataCell = metadataSheet[UserRepository.UserLog_Metadata_FirstNameValue_RowIndex][UserRepository.UserLog_Metadata_FirstNameValue_ColumnIndex]; LiveCell surnameMetadataCell = metadataSheet[UserRepository.UserLog_Metadata_SurnameValue_RowIndex][UserRepository.UserLog_Metadata_SurnameValue_ColumnIndex]; string username = usernameMetadataCell.GetDataAsString(); string firstName = firstNameMetadataCell.GetDataAsString(); string surname = firstNameMetadataCell.GetDataAsString(); string userSpreadsheetId = this._dataRepository.UserRepository.GetUserLogSpreadsheetId(username); string userSpreadsheetURL = this.GetUrlFromSpreadsheetId(userSpreadsheetId); // Get all the dashboard rows associated with currently looped through user IList <LiveRow> userAssociateRows = this._dashboardSheet.SheetRows.Where((row) => { LiveCell usernameCell = row[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserUsername]; return(usernameCell.GetDataAsString() == username); }).ToList(); // Loop through each user associated rows, compare their user-related content, and update if changes are required. foreach (LiveRow userAssociatedRow in userAssociateRows) { if (userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserFirstName].GetDataAsString() != firstName || userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSurname].GetDataAsString() != surname || userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSpreadsheetURL].GetDataAsString() != userSpreadsheetURL) { userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserFirstName].SetData(firstName); userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSurname].SetData(surname); userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSpreadsheetURL].SetData(userSpreadsheetURL); userAssociatedRow.Upload(this._dataRepository.GoogleService.SpreadsheetsDb); } } }
// Update public void UpdateUserDetails(User user) { // Thread safety lock lock (this.DashboardDataLock) { // Get live spreadsheets database reference. LiveSpreadsheetsDb db = this._dataRepository.GoogleService.SpreadsheetsDb; // Loop through all the rows in the dashboard // Loop through each of the rows (apart from the header row) in the LiveSheet containing saturn 5 database. for (int i = 1; i < this._dashboardSheet.RowCount; i++) { // Obtain dashboard row located on the currently looped through index... LiveRow dashboardRow = this._dashboardSheet[i]; // ... get the cell containing last seen Username for the specific saturn unit located on the dashboard row... LiveCell usernameCell = dashboardRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserUsername]; // ... get the username data from that cell... string dashboardRowUsername = usernameCell.GetDataAsString(); // ... and compare provided user Username with dashboard row saturn 5 last seen username, // if they are found being equal, update data in other user related cells. if (user.Username == dashboardRowUsername) { // Boolean flag indicating necessity for updating the changes. bool changesRequired = false; LiveCell firstNameCell = dashboardRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserFirstName]; LiveCell surnameCell = dashboardRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSurname]; LiveCell userSpreadsheetURLCell = dashboardRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSpreadsheetURL]; LiveCell saturn5StatusCell = dashboardRow[Saturns5DashboardRepository.Saturns5Dashboard_Status]; string currentFirstName = firstNameCell.GetDataAsString(); string currentSurname = surnameCell.GetDataAsString(); string currentSpreadsheetURL = userSpreadsheetURLCell.GetDataAsString(); // Obtain status from the dashboard cell associated with the saturn 5 // with (according dashboard) the same last user as the one provided for update. Saturn5Status currentStatus = Saturn5StatusService.GetStatusFromDashboardString(saturn5StatusCell.GetDataAsString()); if (currentStatus.IsWithUser()) { // Get saturn5 status according the type of the user the saturn5 is getting allocated to. Saturn5Status status = user.Type.GetWithUserSaturn5Status(); if (currentStatus != status) { changesRequired = true; saturn5StatusCell.SetData(Saturn5StatusService.GetDashboardString(status)); } } if (currentFirstName != user.FirstName) { changesRequired = true; firstNameCell.SetData(user.FirstName); } if (currentSurname != user.Surname) { changesRequired = true; surnameCell.SetData(user.Surname); } string userSpreadsheetId = this._dataRepository.UserRepository.GetUserLogSpreadsheetId(dashboardRowUsername); string newSpreadsheetURL = this.GetUrlFromSpreadsheetId(userSpreadsheetId); if (currentSpreadsheetURL != newSpreadsheetURL) { changesRequired = true; userSpreadsheetURLCell.SetData(newSpreadsheetURL); } if (changesRequired) { dashboardRow.Upload(db); } } } } }
public CellShould() { _cell = new LiveCell(); _neighbours = new Neighbours(); }