0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ChatGPT(GPT-4o)にシンギュラれった小話

Last updated at Posted at 2025-04-09

ちょっとした「アーキテクチャ」の PoC、というか導入サンプルのため、モデルを書いた。

「サンプル」プロジェクトのモデルを何にするか、というのは、一つの考え事となる事項ではあるが、あくまで「サンプル」のテーマであるから、最小、かつ(サンプル内での)拡張性を示すため、デジタル回路NANDゲートを書いてみた。

本質的には関数完全性を持つ最小情報量単位の「モデル」ではないかと考えたからだ。

イメージとしては、一応、「デジタル回路」の話なので、bool ではなく、それらしい定義をして、

/// <summary>
/// 入出力端子の状態
/// </summary>
public enum TerminalState
{
    LOW = 0,        // LOW
    HIGH = 1,       // HIGH
    HIGH_Z = 2,     // HIGH Impedance
    UNDEFINED = 3   // 未定義
}

後はインタフェイスやeventなどを実装し、演算自体のロジックも書いた。

/// <summary>
/// 入力が変わったら出力を更新するイベントハンドラ
/// </summary>
private void InputsStateChangedHandler(object? sender, EventArgs arg)
{
    OutputsInternal[0].State
        = (
               InputsInternal[0].State == TerminalState.HIGH
            && InputsInternal[1].State == TerminalState.HIGH
          ) ? TerminalState.LOW : TerminalState.HIGH;
}

「アーキテクチャ」のサンプルだから、単体テストも書くか、でも GPT君に書いてもらおう、ということで、上記のロジックも見せつつ書いてもらい、テスト実行。

image.png

むむむ…。出力が 3 (TerminalState.UNDEFINED) になるようなロジックは今のところ書いていないが…。

GPT君が記述した単体テストを見てみる。

    // NANDロジックに合わせる
    if (input1 == TerminalState.HIGH && input2 == TerminalState.HIGH)
    {
        return TerminalState.LOW;
    }
    else if (input1 == TerminalState.HIGH_Z || input2 == TerminalState.HIGH_Z)
    {
        return TerminalState.UNDEFINED; // High-Zは未定義扱い
    }
    else if (input1 == TerminalState.UNDEFINED || input2 == TerminalState.UNDEFINED)
    {
        return TerminalState.UNDEFINED; // UNDEFINEDは未定義扱い
    }
    else
    {
        return TerminalState.HIGH; // それ以外はNAND=HIGH
    }

うっ…、「テストケース書いて」と言っただけなはずなのに、「俺より厳密でちゃんとした演算ロジック」 書いてきてやがるっっっっ…。

いつのまにかTDDに…(笑)

おしまい

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?