インドリィちゃん「本気を出すわよ。」
インドリ「何?何?何?何?何?何?何?何?何?何?何?何?」(ドキドキ)
インドリィちゃん「フルテスト実施」
インドリ「ピィ〜」
///
/// 16ビットのレジスタを全てテストする。
///
[TestMethod( )]
public void RegisterTo16BitTest( ) {
//テスト用変数を準備
ushort val;
ControlProcessingUnit target = new ControlProcessingUnit( );
Random dom = new Random( ( int ) DateTime.Now.Ticks );
Type type = target.GetType();
//リフレクション用変数を準備
string[ ] names = new string[ ] { "AX", "BX", "CX", "DX",
"SI", "DI", "BP", "SP", "IP"};
BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.SetProperty | BindingFlags.GetProperty |
BindingFlags.DeclaredOnly | BindingFlags.Instance;
foreach ( string name in names ) {
//テストするレジスタ用プロパティを取得
PropertyInfo reg32 = type.GetProperty( "E" + name, flags);
Assert.IsNotNull( reg32, "E" + name + "レジスタが足りないぃ〜。");
PropertyInfo reg16 = type.GetProperty(name, flags);
//値の取得&設定テスト
Assert.IsNotNull( reg16, name + "レジスタが足りないぃ〜。" );
for ( int i = 0; i < 100; i++ ) {
//共有フィールドを汚しておく
reg32.SetValue(target,
(uint)dom.Next(int.MinValue, int.MaxValue), null);
//16ビットレジスタのテスト
val = ( ushort ) dom.Next( ushort.MinValue, ushort.MaxValue );
reg16.SetValue( target, val, null );
Assert.AreEqual( val, reg16.GetValue(target, null),
name + "に「" + val.ToString( ) +
"」を入れたら引っかかった。by ドリィ" );
}
//上下限チェック
val = ushort.MinValue;
reg16.SetValue( target, val, null );
Assert.AreEqual( val, reg16.GetValue( target, null ),
name + "の上限チェック失敗。by ドリィ" );
val = ushort.MaxValue;
reg16.SetValue( target, val, null );
Assert.AreEqual( val, reg16.GetValue( target, null ),
name + "の下限チェック失敗。by ドリィ" );
}
}
インドリ「うわぁー何回もレジスタが足りないとか、間違っているとかいわれた。」
インドリィちゃん「わかればいいのよ。」
インドリ「これ何!何でひとつのテストで複数のチェックが出来るの?」
インドリィちゃん「リフレクション。内容を説明する。」
インドリ「インドリィちゃん嬉しそう。エラーが出たの」(途中でさえぎられる)
インドリィちゃん「似たようなプロパティがいっぱいあればトリは忘れる。」
インドリ「うっ言い返せない。」
インドリィちゃん「面倒だからコピーの誘惑も出る。だけど、そういう時は過ちを犯しやすい。」
インドリ「コピーしたのバレてる!」
インドリィちゃん「多くのバグは先入観が原因。先入観がないようにテストはプログラムに任せろ。」
インドリ「おみそれしました。」
インドリィちゃん嬉しそうに消える。
みんな
テストはなるべくプログラムでやるようにしよう。
そうすれば思いがけない間違いを発見してくれるよ。
それにテストプログラムは長くなりがちだから、
リフレクションなどを使って短くする工夫も大事だよ。
テストプログラムが長くなりすぎると生産性が逆に落ちるピヨ。
これでテストはバッチリなはず、みんなもCPUオブジェクトを作ってみよう。
次からはさらに本格的なマシンコードを解説するから、実際にプログラムするとよいよ。
じゃぁ近いうちにまた合いましょう。
じゃあ僕と一緒にバイナリに向かって飛ぼうー。
あれっ?誰もついてこない〜。