Problem p02405 (C++) — buggy submission, verdict: Runtime Error

#include <cassert>
#include <iostream>
// #define NDEBUG

/* 奇数行目 "#"始まり 1行出力 */
void OutOddLine(int w) {
  using namespace std;
  for (int i = 1; i <= w; i++) { /* 横幅分の#.#. (左端: #) */
    switch (i % 2) {
    case 0:
      cout << "."; /* 左端から偶数個目 */
      break;
    case 1:
      cout << "#"; /* 左端から奇数個目 */
      break;
    }
  }
  cout << "\\n";
}
/* 偶数行目 "."始まり 1行出力 */
void OutEvenLine(int w) {
  using namespace std;
  for (int i = 1; i <= w; i++) { /* 横幅分の.#.# (左端: .) */
    switch (i % 2) {
    case 0:
      cout << "#"; /* 左端から偶数個目 */
      break;
    case 1:
      cout << "."; /* 左端から奇数個目 */
      break;
    }
  }
  cout << "\\n";
}

int main(void) {
  using namespace std;
  static const int INPUT_H_MIN = 1; /* 前提は3以上だが、入力終了時は0 */
  static const int INPUT_H_MAX = 300;
  static const int INPUT_W_MIN = 1; /* 前提は3以上だが、入力終了時は0 */
  static const int INPUT_W_MAX = 300;
  int input_h = 0;
  int input_w = 0;

  do {
    /* 高さHと横幅Wを入力 */
    cin >> input_h >> input_w;

    /* 入力値が、  両方0(入力終了時) or 前提条件 最大・最小の制限内の入力 */
    assert((input_h == 0 && input_w == 0) ||
           (INPUT_H_MIN <= input_h && input_h <= INPUT_H_MAX));
    assert((input_h == 0 && input_w == 0) ||
           (INPUT_W_MIN <= input_w && input_w <= INPUT_W_MAX));

    if (input_h != 0 && input_w != 0) {
      /* 出力 */
      for (int i = 1; i <= input_h; i++) {
        switch (i % 2) {
        case 0:
          OutEvenLine(input_w); /* 上から偶数行目 */
          break;
        case 1:
          OutOddLine(input_w); /* 上から奇数行目 */
          break;
        }
      }
      cout << "\\n";
    } else {
      break;
    }
  } while (input_h != 0 && input_w != 0);

  return 0;
}


Error: -6
ed887f71-aadb-4961-991e-687708df8de6.out: /home/alex/Documents/bug-detection/input/Project_CodeNet/data/p02405/C++/s265255532.cpp:46: int main(): Assertion `(input_h == 0 && input_w == 0 ) || (INPUT_H_MIN <= input_h && input_h <= INPUT_H_MAX)' failed.


Fixed submission:

#include <cassert>
#include <iostream>
// #define NDEBUG

/* 奇数行目 "#"始まり 1行出力 */
void OutOddLine(int w) {
  using namespace std;
  for (int i = 1; i <= w; i++) { /* 横幅分の#.#. (左端: #) */
    switch (i % 2) {
    case 0:
      cout << "."; /* 左端から偶数個目 */
      break;
    case 1:
      cout << "#"; /* 左端から奇数個目 */
      break;
    }
  }
  cout << "\\n";
}
/* 偶数行目 "."始まり 1行出力 */
void OutEvenLine(int w) {
  using namespace std;
  for (int i = 1; i <= w; i++) { /* 横幅分の.#.# (左端: .) */
    switch (i % 2) {
    case 0:
      cout << "#"; /* 左端から偶数個目 */
      break;
    case 1:
      cout << "."; /* 左端から奇数個目 */
      break;
    }
  }
  cout << "\\n";
}

int main(void) {
  using namespace std;
  static const int INPUT_H_MIN = 3; /* 前提は3以上だが、入力終了時は0 */
  static const int INPUT_H_MAX = 300;
  static const int INPUT_W_MIN = 3; /* 前提は3以上だが、入力終了時は0 */
  static const int INPUT_W_MAX = 300;
  int input_h = 0;
  int input_w = 0;

  do {
    /* 高さHと横幅Wを入力 */
    cin >> input_h >> input_w;

    /* 入力値が、  両方0(入力終了時) or 前提条件 最大・最小の制限内の入力 */
    assert((input_h == 0 && input_w == 0) ||
           (INPUT_H_MIN <= input_h && input_h <= INPUT_H_MAX));
    assert((input_h == 0 && input_w == 0) ||
           (INPUT_W_MIN <= input_w && input_w <= INPUT_W_MAX));

    if (input_h != 0 && input_w != 0) {
      /* 出力 */
      for (int i = 1; i <= input_h; i++) {
        switch (i % 2) {
        case 0:
          OutEvenLine(input_w); /* 上から偶数行目 */
          break;
        case 1:
          OutOddLine(input_w); /* 上から奇数行目 */
          break;
        }
      }
      cout << "\\n";
    } else {
      break;
    }
  } while (input_h != 0 && input_w != 0);

  return 0;
}