//=========================================================== // 初期化 //=========================================================== public static BenchMethodAttribute GetAttribute(Ref::MethodInfo minfo, afh.Application.Log log) { object[] attrs = minfo.GetCustomAttributes(typeof(BenchMethodAttribute), false); if (attrs.Length == 0) { return(null); } BenchMethodAttribute attr = (BenchMethodAttribute)attrs[0]; if (!minfo.IsStatic) { log.WriteLine("メソッド '{0}' は static でない為 Benchmark を実行出来ません。", minfo); return(null); } if (minfo.GetParameters().Length != 0) { log.WriteLine("メソッド '{0}' の呼び出しには引数が必要なので Benchmark を実行出来ません。", minfo); return(null); } return(attr); }
public static void tst_FloatRem(afh.Application.Log log) { log.WriteLine(11.2 % 3.1); log.WriteLine(-11.2 % 3.1); log.WriteLine(-11.2 - IntUtils.Floor(-11.2, 3.1)); log.WriteLine(System.Math.IEEERemainder(-11.2, 3.1)); log.WriteLine("--角度の実験--"); log.WriteLine(System.Math.Atan2(-1, 1)); }
public static void test_stringLineColumn(afh.Application.Log log) { const string sample = @" 今日は 作用なら おほほほほほほほほ "; afh.Text.MultilineString mstr = new afh.Text.MultilineString(sample); log.DumpString(sample); log.WriteLine("3 行 1 列: {0}", mstr[3, 1]); }
private static string SearchAssemblyLocation(string str) { string cand = System.IO.Path.Combine(afh.Application.Path.ExecutableDirectory, str); if (System.IO.File.Exists(cand)) { return(cand); } string cand2 = cand + ".dll"; if (System.IO.File.Exists(cand2)) { return(cand2); } cand2 = cand + ".exe"; if (System.IO.File.Exists(cand2)) { return(cand2); } cand = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), str); if (System.IO.File.Exists(cand)) { return(cand); } cand2 = cand + ".dll"; if (System.IO.File.Exists(cand2)) { return(cand2); } cand2 = cand + ".exe"; if (System.IO.File.Exists(cand2)) { return(cand2); } log.WriteLine("指定したファイルは見つかりません。正しいファイル名を指定して下さい。"); return(null); }
static void Main(string[] args) { System.Windows.Forms.Application.EnableVisualStyles(); System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false); log = afh.Application.LogView.Instance.CreateLog("afh.Tester"); log.WriteLine(STR_紹介文); log.WriteLine("<引数>"); foreach (string arg in args) { log.WriteLine(arg); } log.WriteLine("</引数>"); log.WriteLine(); if (args.Length == 0) { log.WriteLine("ファイルが指定されていません。.NET assembly を指定して下さい。"); log.WriteLine(STR_説明); } else { string dllpath = SearchAssemblyLocation(args[0]); if (dllpath != null) { wndMain = new Form1(dllpath); } } if (wndMain == null) { wndMain = new Form1(); } System.Windows.Forms.Application.Run(wndMain); }
public static void tst_LongLiteral(afh.Application.Log log) { log.WriteLine(0x7ff0000000000000L); log.WriteLine(0x7ffL << 52); }
public static void tst_DoubleNaN(afh.Application.Log log) { log.Lock(); log.WriteLine("NaN 同士"); log.WriteLine(double.NaN == 0); log.WriteLine(double.NaN != 0); log.WriteLine(double.NaN == double.NaN); log.WriteLine(double.NaN != double.NaN); log.WriteLine(double.NaN < 0); log.WriteLine(double.NaN >= 0); log.WriteLine(double.NaN < double.NaN); log.WriteLine(double.NaN >= double.NaN); log.WriteLine(); log.WriteLine("+∞ 同士"); log.WriteLine(double.PositiveInfinity == double.PositiveInfinity); log.WriteLine(double.PositiveInfinity != double.PositiveInfinity); log.WriteLine(double.PositiveInfinity < double.PositiveInfinity); log.WriteLine(double.PositiveInfinity >= double.PositiveInfinity); log.WriteLine(); log.WriteLine("-∞ 同士"); log.WriteLine(double.NegativeInfinity == double.NegativeInfinity); log.WriteLine(double.NegativeInfinity != double.NegativeInfinity); log.WriteLine(double.NegativeInfinity < double.NegativeInfinity); log.WriteLine(double.NegativeInfinity >= double.NegativeInfinity); log.WriteLine(); log.WriteLine("NaN > 色々"); log.WriteLine(double.NaN > 0); log.WriteLine(double.NaN > 1); log.WriteLine(double.NaN > -1); log.WriteLine(double.NaN > double.NegativeInfinity); log.WriteLine(double.NaN > double.PositiveInfinity); log.WriteLine(); log.Unlock(); const double inf = double.PositiveInfinity; const double NaN = double.NaN; log.Lock(); log.WriteLine("初等関数と NaN"); log.WriteVar("Atan2(∞,∞)", System.Math.Atan2(inf, inf)); log.WriteVar("Atan2(∞,NaN)", System.Math.Atan2(inf, NaN)); log.WriteVar("Atan2(0,0)", System.Math.Atan2(0, 0)); log.WriteVar("Sqrt(∞)", System.Math.Sqrt(inf)); log.WriteVar("Sqrt(NaN)", System.Math.Sqrt(NaN)); log.Unlock(); }
public static void test_shoshiki(afh.Application.Log log) { log.WriteLine(123.ToString("D4")); log.WriteLine(123.ToString("F4")); }
//=========================================================== // 計測 //=========================================================== public void Execute(afh.Application.Log log) { // 前書き log.Lock(); log.WriteLine(); log.WriteLine(STR_LINE); log.WriteLine("\tBenchmark を開始します。"); log.WriteLine("\t\tMethodName: {0}::{1}", minfo.DeclaringType.FullName, minfo.Name); if (this.Description != "") { log.WriteLine("\t\tDescription: {0}", this.Description); } log.WriteLine(STR_LINE); log.Unlock(); try{ int loop = 1; double msecs = 0; for (int i = 1; loop > 0; loop <<= 2, i++) { log.WriteLine("第 {0} 回計測開始 (Loop 回数: {1} 回):", i, loop); TimeSpan ts = this.meth(loop); log.WriteLine("\t経過時間: {0} ms", msecs = ts.TotalMilliseconds); if (ts.Seconds != 0) { break; } if (msecs < 16.0) { loop <<= 6; } } double time = msecs / loop; int iunit = 0; if (time > 0) { while (time < 1) { time *= 1000; iunit++; } } log.WriteLine("一回当たり時間: {0:F2} {1}s", time, units[iunit]); }catch (System.Exception e) { log.WriteError(e, "Bench の実行中に例外が発生しました。"); } // 後書き log.Lock(); log.WriteLine(STR_LINE); log.WriteLine("\tBenchmark を終了しました。"); log.WriteLine(STR_LINE); log.Unlock(); }
public void Execute(afh.Application.Log log) { // 前書き log.Lock(); log.WriteLine(); log.WriteLine(STR_LINE); log.WriteLine("\tTest を開始します。"); log.WriteLine("\t\tMethodName: {0}::{1}", info.DeclaringType.FullName, info.Name); if (description != "") { log.WriteLine("\t\tDescription: {0}", this.description); } log.WriteLine(STR_LINE); log.Unlock(); bool failed = false; object ret = null; System.DateTime start = System.DateTime.Now; try { ret = this.info.Invoke(null, new object[] { log }); }catch (System.Exception e) { log.WriteError(e, "Test の実行中に例外が発生しました。"); failed = true; } System.TimeSpan ts = System.DateTime.Now - start; // 後書き log.Lock(); if (!failed && info.ReturnType != typeof(void)) { log.WriteLine(STR_LINE); log.WriteLine("戻り値 ({0}):", info.ReturnType); log.WriteLine(ret ?? "null"); } log.WriteLine(STR_LINE); log.WriteLine("\tTest を終了しました。"); log.WriteLine("\t\t経過時間: {0} ms", ts.TotalMilliseconds); log.WriteLine(STR_LINE); log.Unlock(); }
public static void 列挙体確認(afh.Application.Log log) { log.WriteLine(afh.Text.GeneralCategory.C.ToString()); log.WriteLine(afh.Text.UnicodeBlock.CJKCompatibilityIdeographs.ToString()); }
/// <summary> /// Window スレッドから呼び出して下さい。 /// </summary> public static void Initialize() { log.WriteLine("afh.HTML 初期化終了"); }