はじめに:なぜ Google C++ Testing Frameworkを使うのか¶ Google C++ Testing Framework を上手に活用すれば,より良い C++ のテストを書くことができます. Linux,Windows,そして Mac,あなたが C++ のコードを書いているこれらの環境に関係なく Google Test を利用できます. では,優れたテストを書くにはどうすればよいのでしょうか?Google C++ Testing Framework は,どのように役立つのでしょうか?我々は次のように考えています: テストには, 独立性 と 再現性 が必要です.別のテストの結果に依存して成功したり失敗したりするテスト,をデバッグするのは非常に面倒な作業です.Google C++ Testing Framework は,各テストを異なるオブジェクト上で実行することによって
は、Boost.Testライブラリのビルド不要で使用できる小さなテストライブラリとなっています。 #include <vector> #include <boost/test/minimal.hpp> int test_main(int argc, char* argv[]) { std::vector<int> v; BOOST_CHECK(v.empty()); BOOST_REQUIRE(v.size() == 0); return 0; } **** no errors detectedminimal testで用意されているのは以下の4つ: BOOST_CHECK(predicate) : 条件式を引数にとり、失敗時でもテストを続行します。 BOOST_REQUIRE(predicate) : こちらは、失敗時に例外を投げてテストを終了するので、失敗したら続行不可能なケースで使用
はじめに 2月のはじめ頃、CMakeを使ってビルドを自動化しようと思い、色々ググってCMakeLists.txtを作り試行錯誤したのですが、その時は結局断念しました。というのも、abcというステップがあるとすると、ググッて得られる解説はabcのaやbが抜けていきなりcから解説されたものが多く、初心者にはきつかったからです。特にcmake.orgのチュートリアルはまさにその典型で、チュートリアルのStep 1からして長過ぎて、本当に何が必要なのかわかりにくい・・・orz ところが、今学期受けているHigh Performance Computingという講義で行われたCMakeの使い方の解説がわかり易すぎて、あっという間に自作ライブラリをCMakeでコンパイルすることができるようになり、CMakeの便利さに感動してしまいました。私と同じくCMake初心者という方にこの感動を共有すべく、ここに
<body> <p>このページを表示するには、フレームをサポートしているブラウザが必要です。</p> </body>
皆さんこんにちは お元気ですか?私は元気です。 今日はCppUnitについて解説していきたいと思います。 CppUnitとは? C++の単体テストを自動化するライブラリです。 インストール Homebrewを使いましょう。 brew install cppunit CppUnitの使い方 サンプルコード 今回、Functionの内部が正確かどうかチェックします。 #include <cppunit/BriefTestProgressListener.h> #include <cppunit/CompilerOutputter.h> #include <cppunit/extensions/TestFactoryRegistry.h> #include <cppunit/TestResult.h> #include <cppunit/TestResultCollector.h> #inclu
Intro 「新しい API などを、どうやって調べているのか」「仕様などを調べる際に、どこから手をつければ良いのか」などといった質問をもらうことがある。 確かにどこかに明文化されていると言うよりは、普段からやっていて、ある程度慣れてきているだけなものであり、自分としても明文化していなかったため、これを機に解説してみる。 やり方は一つではない上に日々変わっていくだろうが、頻繁にこの記事を更新するつもりはない。また、筆者は実務で必要になるというよりは、ほとんどを趣味でやっているため、このやり方が合わない場面は多々有るだろう。 スコープとしては、ライブラリ、ツール、フレームワークなどではなく、 Web プラットフォーム関連の標準やブラウザの実装状況などに限定している。 Scope 従来からあり、広く認知された API については、情報も多く調査の敷居はそこまで高くないため、今回は議論が始まって
クラスの継承 既存のクラスを基にして新しいクラスを作ることを,クラスの継承 (inheritance) といいます。 次のプログラムは,Clock クラスを継承した ChimeClock クラスを定義したものです。 #include <cstdio> // 時計を表すクラス class Clock { protected: int hour; int minute; public: Clock(int h, int m) : hour(h), minute(m) { } virtual void print(); }; // チャイム付きの時計を表すクラス class ChimeClock : public Clock // Clock クラスを継承 { public: ChimeClock(int h, int m) : Clock(h, m) { } void print(); //
株式会社セガはアクションパズルゲーム『ぷよぷよ』のソースコードを使ってプログラミング学習ができる『SEGA CHALLENGE! ぷよぷよプログラミング』が「第17回 日本e-Learning 大賞」において、日本電子出版協会会長賞を受賞したことを発表した。日本電子出版協会会長賞受賞はプログラミング学習にアクションパズルゲーム『ぷよぷよ』を取り入れることにより親しみやすい操作による学習を可能としたことが評価された。 日本e-Learning 大賞とは 「日本e-Learning 大賞は」一般社団法人e-Learning Initiative Japanが主催する企業・学校・自治体などにおける、eラーニングを活用したコンテンツ・サービス・ソリューションの中からとくに優れたものが選出されるアワード。経済産業省、文部科学省、総務省、厚生労働省の4つの大臣賞が付与されるアワードは教育をテーマとした
#include <fstream> #include <iostream> #include <string> #include <vector> #include "utf8.h" using namespace std; int main(int argc, char** argv) { if (argc != 2) { cout << "\nUsage: docsample filename\n"; return 0; } const char* test_file_path = argv[1]; // Open the test file (must be UTF-8 encoded) ifstream fs8(test_file_path); if (!fs8.is_open()) { cout << "Could not open " << test_file_path <<
#include <stdio.h> #include <string.h> int main() { char str[] = "日本語サンプル"; int length = strlen(str); printf("1文字目: %c\n", str[0]); printf("長さ: %d\n", length); return 0; } このように、単なるchar型として扱うと日本語を上手く処理できない。まあ、日本語が2バイト以上で表現されているので当たり前といえば当たり前なんだけど。 そこで、C/C++で上手に日本語を処理するための方法を2通り紹介したい。 ワイド文字を使う ワイド文字は、16ビット固定長で表現される多言語文字体型のことである。 C言語では、wchar_t型を用いてワイド文字を扱うことができる。 しかし、ワイド文字を扱うには、ロケールの設定が必要である。日本語だけ扱い
パーサジェネレータ caper "caper" (github)は拙作のパーサジェネレータです。yaccやbisonなどと同じ場所で使うツールです。 基本的にはC++コードを生成するために作ったのですが、そのほかにもJavascript, D, Java, C#などのコードを出力することができます。 特長 大きなところでは、こんな特長があります。 出力コードが全部テンプレートクラスでヘッダファイル一つなので、ライブラリなどをリンクする必要がない 出力コードが大変ヒューマンリーダブル(手書きで書いたと強弁できるLALRパーサ、というコンセプト) PUSH型(パーサは常に受身で、トークンをポストするまで動かない) そのほかの特長については、http://jonigata.github.io/caper/caper_more.html を御覧ください。 歴史など このソフトは結構古いソフトで、
Elixirコンパイラ②をElixirで作る:LLVM IRをElixirで生成(ASTはElixirマクロ互換)→再帰下降構文解析→ネイティブコード生成C++ElixirLLVMfukuoka.ex fukuoka.exのpiacereです ご覧いただいて、ありがとうございます 今回も、前回に引き続き、Elixirにて、Elixirコードからネイティブコード生成する「Elixirコンパイラ」を作っていきます 内容が、面白かったり、役に立ったら、「いいね」よろしくお願いします C++と同等のコードをElixirで書く 前回、LLVM IR解析向けに作った、下記C++コードと同等のコードをElixirで書くと、こうなります
fukuoka.exのpiacereです ご覧いただいて、ありがとうございます これまでのコラムは、割とアプリ/SI/Web/データサイエンス寄りのElixirコラムが多かったですが、今回は、毛色を変えて、Elixirコードからネイティブコードをコンパイルできるような、いわゆる「Elixirコンパイラ」をLLVMで作れるか、何回かに分けて、トライしてみようと思います ちなみに、私はWindows使い…それも「36年の歴史を誇る重度なMS信者※」なので、LLVMもWindowsで動かしていきます ※TwitterやQiitaをご覧のフォロワーの方は、どうも私のことをLinux/mac使いと思い込んでいる方が多いみたいです(無論、仕事や趣味でガンガン使ってますけど)が、私が四六時中も手放さず、どこに行くにも携帯している愛機は、以下Let's note CF-RZ6+Windows 10です h
1. オブジェクト指向の起源 2003年チューリング賞の受賞者アラン・ケイさんはよくオブジェクト指向プログラミングの父と称されます。ご本人も憚ることなく、幾度、公の場で発明権を宣言しています。しかし、ケイさんは「C++」や「Java」などの現代のオブジェクト指向言語を蔑ろにしています。これらの言語は「Simula 67」という言語を受け継いだもので、私が作った「Smalltalk」と関係ないのだとケイさんは考えています。 オブジェクト指向という名称は確かにアラン・ケイさんに由来するものです。しかし、C++とJavaで使われている現代のオブジェクト指向は当初のと結構違います。ケイさん自身もこれらの言語を後継者として認めないです。では、ケイさん曰くC++とJavaの親であるSimula 67という言語はどんな言語でしょうか。ここで、簡単なサンプルコードを見てみましょう。 Class Recta
キチガイに刃物、ゴミプログラマに継承。危険なものは取り上げるべきだ。 オブジェクト指向プログラミングにおける継承は強力な手法であるが、これを正しく使えるプログラマは残念なことに極めて少ない。たいていの場合、継承を使うことで却ってプログラムの保守を困難にしてしまう。継承のアンチパターンの最たるものは、単なるメソッドやメンバ変数の共有のために継承を使うパターンだ。これを行うとデータが密結合になってバグの原因になり、プログラムを把握することも極めて困難になる。 そもそも、熟達したプログラマの感覚では、業務で書くアプリケーションの実装に継承を使うべき局面などほとんど無い。ライブラリ等のより低レベルな処理で仕様が確定しているものについては、継承が効果的となる場合もあるが、複雑なアプリケーションのロジックに継承を使うのはほとんどの場合、時期尚早な抽象化となる。 また、凡庸なプログラマが継承で実現したい
Per 3 juli 2023 is de NARCIS website offline gehaald en de NARCIS-dienstverlening geëindigd. De content, zoals metadata van publicaties en datasets, is uiteraard nog steeds beschikbaar in de repositories van de verschillende instellingen en is daar te allen tijde te raadplegen of te harvesten. Onderzoeksinformatie van Nederlandse instellingen vind je via de ‘Portal of Research Output from the Neth
日々技術検証に勤しんでいる D.M. です。 先日はノーコードは制約がキツイ!みたいな記事を書きましたが、今回はその解決編です。 TL;DR ・ノーコードでは複雑な画面UIにこだわりすぎず、単純化した画面で作る。(1画面1レコード登録の原則) ・どうしても凝ったロジックが必要なケースでは、 Javascript で実装する。(ローコード) 目次 1.ノーコードで「調整さん」を作る 2.ノーコードで「チームランチシャッフルアプリ」を作る ノーコードで「調整さん」を作る 前回記事では、ノーコードプラットフォーム Bubble を使って、かの有名な Web サイト「調整さん」を作るぞと意気込んでみました。 ただ、いくつかの壁にぶつかってしまい挫折してしまいました。 まず改めて何を作るか、何が問題だったかを整理したいと思います。 ※「調整さん」は予定調整ができる出欠表のツールです。ご存じない方はこ
5. プロセス間通信 基本的に、各プロセスは独立に動作する。(互いに影響を与えない。) しかし、複数のプロセスを協力して動作させたい場合には、 プロセス同士が情報をやりとりする必要がある。 情報のやりとりには 共有メモリ、同期(セマフォ、イベント-シグナル)、メッセージ交換、ソケット、パイプ,RPC, 等がある。 5.1 共有メモリ 共有データのconsistency(一貫性、無矛盾性)の維持が大切。 プロセスが共有データへアクセスする際には注意が必要。 共有データ(変数・表・ファイル)や共有リソース(メモリ, ファイル, I/O機器(プリンタなど), 等) にアクセスする部分のプログラムを、危険区間 (critical-section, きわどい区間, 臨界区間)という。 あるプロセスが危険区間を実行中は、他のプロセスは危険区間を実行しないようにする。 (同時に2つのプロセスが危険区間を
はじめに QuickJS は C/C++ に組み込める軽量な JavaScript エンジンである。ライセンスは MIT license。JavaScript を組み込みたいけれど V8 はオーバースペックすぎる、という時に有用と思われる。 デザインがシンプルすぎてかえって信頼感のある公式ページはこちら。 QuickJS Javascript Engine QuickJS is a small and embeddable Javascript engine. It supports the ES2020 specification including modules, asynchronous generators, proxies and BigInt. (訳:QuickJS は小さい・組み込み可能な JavaScript エンジンである。モジュール・非同期ジェネレータ・プロキシ・Bi
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く