static void Main(string[] args)
        {
            FluentArgsBuilder
            .NewWithDefaultConfigs()
            .WithApplicationDescription("Benchmark of sqlite3 bulk inserts with different pragmas.")
            .Parameter <int>("-i", "--batchSizeIncrement")
            .WithDescription("Growth of 'batchSizeBase' parameter in each test set run.")
            .WithValidation(i => i >= 1)
            .IsOptionalWithDefault(5_000)
            .Parameter <int>("-b", "--batchSizeBase")
            .WithDescription("Minimal number of inserts in a transaction, will be incremented by 'batchSizeIncrement' in each test set run.")
            .WithValidation(b => b >= 1)
            .IsOptionalWithDefault(5_000)
            .Parameter <int>("-t", "--tableCount")
            .WithDescription("Number of tables to use for inserts.")
            .WithValidation(t => t >= 1)
            .IsOptionalWithDefault(10)
            .Parameter <string>("-s", "--string")
            .WithDescription("Value to insert (along with sequential integer primary key).")
            .IsOptionalWithDefault("string")
            .Parameter <int>("-r", "--rowCount")
            .WithDescription("Total number of rows to insert in each test.")
            .WithValidation(r => r >= 100)
            .IsOptionalWithDefault(5_000_000)
            .Parameter <int>("-n", "--number")
            .WithDescription("Number of test set runs.")
            .WithValidation(n => n >= 1)
            .IsOptionalWithDefault(40)
            .Call(n => totalRows => value => tblCount => batchSizeBase => batchSizeIncrement =>
            {
                Console.WriteLine("batchSize;default;sync-off;jm-wal;jm-off;lm-excl;sync-off&jm-off&lm-excl");
                for (int i = 0; i < n; i++)
                {
                    var batchSize = batchSizeBase + batchSizeIncrement * i;
                    var commits   = Math.Max(1, totalRows / batchSize);

                    Console.WriteLine(new StringBuilder().AppendJoin(";",
                                                                     batchSize,
                                                                     RunTestSet("default", i, Array.Empty <string>(), tblCount, commits, batchSize, value),
                                                                     RunTestSet("sync-off", i, new[] { "synchronous = OFF" }, tblCount, commits, batchSize, value),
                                                                     RunTestSet("jm-wal", i, new[] { "journal_mode = WAL" }, tblCount, commits, batchSize, value),
                                                                     RunTestSet("jm-off", i, new[] { "journal_mode = OFF" }, tblCount, commits, batchSize, value),
                                                                     RunTestSet("lm-excl", i, new[] { "locking_mode = EXCLUSIVE" }, tblCount, commits, batchSize, value),
                                                                     RunTestSet("sync-off&jm-off&lm-excl", i, new[] {
                        "synchronous = OFF",
                        "journal_mode = OFF",
                        "locking_mode = EXCLUSIVE"
                    }, tblCount, commits, batchSize, value)
                                                                     ));
                }
            })
            .Parse(args);
        }