using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Reflection; using Tensorflow; using Console = Colorful.Console; namespace TensorFlowNET.Examples { class Program { static void Main(string[] args) { var errors = new List(); var success = new List(); var disabled = new List(); var examples = Assembly.GetEntryAssembly().GetTypes() .Where(x => x.GetInterfaces().Contains(typeof(IExample))) .Select(x => (IExample)Activator.CreateInstance(x)) .OrderBy(x => x.Priority) .ToArray(); Console.WriteLine($"TensorFlow v{tf.VERSION}", Color.Yellow); Console.WriteLine($"TensorFlow.NET v{Assembly.GetAssembly(typeof(TF_DataType)).GetName().Version}", Color.Yellow); var sw = new Stopwatch(); foreach (IExample example in examples) { if (args.Length > 0 && !args.Contains(example.Name)) continue; Console.WriteLine($"{DateTime.UtcNow} Starting {example.Name}", Color.White); try { if (example.Enabled || args.Length > 0) // if a specific example was specified run it, regardless of enabled value { sw.Restart(); bool isSuccess = example.Run(); sw.Stop(); if (isSuccess) success.Add($"Example {example.Priority}: {example.Name} in {sw.Elapsed.TotalSeconds}s"); else errors.Add($"Example {example.Priority}: {example.Name} in {sw.Elapsed.TotalSeconds}s"); } else { disabled.Add($"Example {example.Priority}: {example.Name} in {sw.ElapsedMilliseconds}ms"); } } catch (Exception ex) { errors.Add($"Example {example.Priority}: {example.Name}"); Console.WriteLine(ex); } Console.WriteLine($"{DateTime.UtcNow} Completed {example.Name}", Color.White); } success.ForEach(x => Console.WriteLine($"{x} is OK!", Color.Green)); disabled.ForEach(x => Console.WriteLine($"{x} is Disabled!", Color.Tan)); errors.ForEach(x => Console.WriteLine($"{x} is Failed!", Color.Red)); Console.Write("Please [Enter] to quit."); Console.ReadLine(); } } }