original: Robustness principle
コンピューティングの世界において、堅牢性原則はソフトウェア設計のガイドラインである:
あなたが為すべきことには保守的であれ、あなたが他から受け入れることには寛容であれ(しばしば「あなたが送るものには保守的であれ、あなたが受け取るものには寛容であれ」と言い換えられる)
この原則は、TCPの初期の仕様を執筆したジョン・ポステルに因んで、ポステルの法則としても知られている:
original: Robustness principle
コンピューティングの世界において、堅牢性原則はソフトウェア設計のガイドラインである:
あなたが為すべきことには保守的であれ、あなたが他から受け入れることには寛容であれ(しばしば「あなたが送るものには保守的であれ、あなたが受け取るものには寛容であれ」と言い換えられる)
この原則は、TCPの初期の仕様を執筆したジョン・ポステルに因んで、ポステルの法則としても知られている:
use orbtk::prelude::*; | |
use std::cell::Cell; | |
// `Rust のマルチプラットフォーム UI ライブラリ OrbTk の使い方 - A Memorandum<https://blog1.mammb.com/entry/2019/12/16/090000>` | |
// で紹介されている、Rust用クロスプラットフォームUIツールキット `OrbTk<https://github.com/redox-os/orbtk>` | |
// が興味深かったので写経したところ、上記記事では OrbTk のバージョンは 0.3.1-alpha1 でしたが、 | |
// 現時点(2020/08/13)では v0.3.1-alpha4 まで上がっており、そのまま書くだけでは動かないところが | |
// あったので、「イベント処理」のサンプルに v0.3.1-alpha4 なりの修正を入れて書き直してみました。 | |
static ID_INPUT: &'static str = "input"; |
Get-ChildItem -Recurse | where { $_.Directory } | %{ [System.String]::Format("{0}`t{1}`t{2}", $_.FullName, $_.Length, $_.LastWriteTime) } | %{ Write-Output $_ } |
let catch (expr: Lazy<'T>) = | |
try | |
Choice2Of2(expr.Force()) | |
with | |
| ex -> Choice1Of2(ex) | |
let parameterizedTest(input, expected) = test { | |
let actual = catch (Lazy.Create <| fun () -> fut input) | |
match (expected, actual) with | |
| (Choice1Of2 ex, Choice1Of2 ex') -> |
(* | |
* The MIT License (MIT) | |
* | |
* Copyright (c) 2016 Kazuhiro Matsushima | |
* | |
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the | |
* Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, | |
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions: | |
* | |
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. |
let rec factorial n = | |
match n with | |
| 0 | 1 -> 1 | |
| _ -> n * (factorial (n - 1)) | |
type FactorialNumber(num: int) = | |
let infactorials = Seq.initInfinite <| fun i -> factorial (i+1) | |
let range = Seq.takeWhile (fun fc -> fc <= num) infactorials |> Seq.toList | |
let rec factSystemize n fcs acc = | |
match fcs with |
module ConsolePrinter = | |
open System.Text | |
open System.ComponentModel | |
[<EditorBrowsable(EditorBrowsableState.Never)>] | |
let private bit mask b = | |
b &&& mask = mask | |
[<EditorBrowsable(EditorBrowsableState.Never)>] | |
let private bit0 = bit 0b00000001uy |
type Family = Blair | Smith | Kelly | Tavares | Chen | Singh | |
type Person = { First: string; Last: Family } | |
let blair's first = { First = first; Last = Blair } | |
let smith's first = { First = first; Last = Smith } | |
let kelly's first = { First = first; Last = Kelly } | |
let tavares' first = { First = first; Last = Tavares } | |
let chen's first = { First = first; Last = Chen } | |
let singh's first = { First = first; Last = Singh } |
ぱぴろん(Papylon)は、満たすべき性質(property)を記述することでテストケースを自動生成する Python 用テスティングツールです。いわゆる"QuickCheck"系の流れを汲み、 FsCheck と ScalaCheck の影響を強く受けています。テストしたい対象の振る舞うべき性質を記述して実行すると、テストケースをランダムに生成して実行し、性質が成り立つかどうかを確認します。
List
/\
a1 /\
a2 /\
a3 nil
foldr