using Towel.DataStructures;
using static Towel.Syntax;
static CompareResult CompareStrings(string a, string b) => Compare.Wrap(a.CompareTo(b));
static string ToEnglishWords(int a) => a.ToEnglishWords();
int[] values = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, };
Console.WriteLine("Unsorted Values:");
values.Stepper(x => Console.WriteLine(" " + i++ + ": " + values[x].ToEnglishWords()));
string[] array = values.Select(ToEnglishWords).ToArray();
Console.WriteLine("Array:");
Stepper.Iterate(values.Length, x => Console.WriteLine(" " + x + ":" + array[x]));
var list = values.Select(ToEnglishWords).ToList();
Console.WriteLine("List:");
Sort.Bubble(0, values.Length - 1, i => list[i], (i, v) => list[i] = v, CompareStrings);
Stepper.Iterate(values.Length, x => Console.WriteLine(" " + x + ":" + list[x]));
var dictionary = values.ToDictionary(x => x, ToEnglishWords);
Sort.Bubble(0, values.Length - 1, i => dictionary[i], (i, v) => dictionary[i] = v, CompareStrings);
Console.WriteLine("Dictionary:");
Stepper.Iterate(values.Length, x => Console.WriteLine(" " + x + ":" + dictionary[x]));
var map = new Towel.DataStructures.MapHashLinked<string, int>();
Stepper.Iterate(values.Length, x => map.Add(x, x.ToEnglishWords()));
Sort.Bubble(0, values.Length - 1, i => map[i], (i, v) => map[i] = v, CompareStrings);
Console.WriteLine("Map:");
Stepper.Iterate(values.Length, x => Console.WriteLine(" " + x + ":" + map[x]));