/// <summary> /// Defines the entry point of the application. /// </summary> /// <param name="args">The arguments.</param> static void Main([NotNull][ItemNotNull] string [] args) { var programName = Process.GetCurrentProcess( ).ProcessName; if (args.Length == 1) { var fileName = args [0]; var fileInfo = new FileInfo(fileName); if (!fileInfo.Exists) { Console.WriteLine($"File '{fileInfo.FullName} does not exist"); } var preferencesModel = new PreferencesModel( ); PreferencesHelpers.Load(preferencesModel, fileInfo); var byGender = preferencesModel.ByGenderLastName( ); WriteRecords("By gender, then last name ascending", byGender); var byBirthDate = preferencesModel.ByBirthDate( ); WriteRecords("By birth date", byBirthDate); var byLastNameDescending = preferencesModel.ByLastNameDescending( ); WriteRecords("By last name descending", byLastNameDescending); var byName = preferencesModel.ByName( ); WriteRecords("By name", byName); } else if (args.Length == 2) { if (!int.TryParse(args [1], out var recordsToGenerate)) { throw new InvalidOperationException( ); } var fileName = args [0]; var fileInfo = new FileInfo(fileName); var format = fileInfo.Extension.ToUpperInvariant( ); if (fileInfo.Exists) { Console.WriteLine($"File '{fileInfo.FullName} already exists, you must remove it manually"); } var randomRecords = PreferencesHelpers.GenerateRandomRecords(recordsToGenerate, new Random( ), 7); using (var writer = new StreamWriter(fileInfo.FullName, false)) { var delimiterChar = PreferencesHelpers.AssociatedDelimiter(fileInfo); var delimiterString = delimiterChar.ToString( ); randomRecords.ForEach(r => { var strings = new [] { r.LastName, r.FirstName, r.Gender, r.FavoriteColor, r.DateOfBirth }.ToList( ); var line = string.Join(delimiterString, strings); writer.WriteLine(line); }); } } else { WriteUsageInfo( ); } }
public static void Test_that_ordering_is_correct( ) { var randomProvider = new Random( ); var person1 = PreferencesHelpers.GenerateRandomRecord(randomProvider); var person1A = new PersonColorPreferenceModel( ).PopulateFrom(person1); person1A.LastName = "person1A"; var person2 = PreferencesHelpers.GenerateRandomRecord(randomProvider); var person3 = PreferencesHelpers.GenerateRandomRecord(randomProvider); var person3A = new PersonColorPreferenceModel( ).PopulateFrom(person3); person3A.LastName = "person3A"; var newRecords = new List <PersonColorPreferenceModel> { person1, PreferencesHelpers.GenerateRandomRecord(randomProvider), person1, PreferencesHelpers.GenerateRandomRecord(randomProvider), person2, PreferencesHelpers.GenerateRandomRecord(randomProvider), person2, PreferencesHelpers.GenerateRandomRecord(randomProvider), PreferencesHelpers.GenerateRandomRecord(randomProvider), person3, PreferencesHelpers.GenerateRandomRecord(randomProvider), person3 }.ToSafeList( ); var model = new PreferencesModel( ); model.Add(newRecords); var added = model.PersonColorPreferences.ToSafeList( ); var byBirthDate = model.ByBirthDate( ).ToSafeList( ); var byGenderLastName = model.ByGenderLastName( ).ToSafeList( ); var byLastNameDescending = model.ByLastNameDescending( ).ToSafeList( ); var byName = model.ByName( ).ToSafeList( ); added.Aggregate((arg1, arg2) => { Assert.True(arg1.Id < arg2.Id); return(arg2); }); byBirthDate.Aggregate((arg1, arg2) => { Assert.True(arg1.DateTimeBirth <= arg2.DateTimeBirth); return(arg2); }); byGenderLastName.Aggregate((arg1, arg2) => { var order = string.Compare(arg1.Gender, arg2.Gender, StringComparison.InvariantCulture); Assert.True(order <= 0); if (order == 0) { var order2 = string.Compare(arg1.LastNameUpper, arg2.LastNameUpper, StringComparison.InvariantCulture); Assert.True(order2 <= 0); } return(arg2); }); byLastNameDescending.Aggregate((arg1, arg2) => { Assert.True(string.Compare(arg1.LastNameUpper, arg2.LastNameUpper, StringComparison.InvariantCulture) >= 0); return(arg2); }); byName.Aggregate((arg1, arg2) => { var order = string.Compare(arg1.LastNameUpper, arg2.LastNameUpper, StringComparison.InvariantCulture); Assert.True(order <= 0); if (order == 0) { var order2 = string.Compare(arg1.FirstNameUpper, arg2.FirstNameUpper, StringComparison.InvariantCulture); Assert.True(order2 <= 0); } return(arg2); }); }