factbase 0.7.3 → 0.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/benchmark.yml +3 -1
- data/.gitignore +6 -5
- data/.rultor.yml +1 -1
- data/Gemfile +1 -1
- data/Gemfile.lock +9 -9
- data/README.md +37 -25
- data/REUSE.toml +4 -0
- data/Rakefile +10 -3
- data/benchmark/bench_factbase.rb +61 -0
- data/benchmark/bench_large_query.rb +128 -0
- data/benchmark/bench_query.rb +41 -0
- data/benchmark/bench_taped.rb +33 -0
- data/factbase.gemspec +5 -5
- data/lib/factbase/accum.rb +1 -1
- data/lib/factbase/{looged.rb → logged.rb} +8 -8
- data/lib/factbase/taped.rb +25 -25
- data/lib/factbase/term.rb +9 -1
- data/lib/factbase/terms/aggregates.rb +2 -2
- data/lib/factbase/terms/meta.rb +1 -1
- data/lib/factbase/terms/ordering.rb +1 -1
- data/lib/factbase.rb +3 -5
- data/test/factbase/terms/test_aggregates.rb +2 -2
- data/test/factbase/terms/test_aliases.rb +4 -4
- data/test/factbase/terms/test_casting.rb +1 -2
- data/test/factbase/terms/test_debug.rb +2 -2
- data/test/factbase/terms/test_defn.rb +2 -2
- data/test/factbase/terms/test_logical.rb +2 -2
- data/test/factbase/terms/test_math.rb +1 -2
- data/test/factbase/terms/test_meta.rb +2 -2
- data/test/factbase/terms/test_ordering.rb +2 -2
- data/test/factbase/terms/test_strings.rb +2 -2
- data/test/factbase/terms/test_system.rb +1 -2
- data/test/factbase/test_accum.rb +2 -2
- data/test/factbase/test_churn.rb +2 -2
- data/test/factbase/test_fact.rb +2 -2
- data/test/factbase/test_flatten.rb +2 -2
- data/test/factbase/test_inv.rb +2 -2
- data/test/factbase/{test_looged.rb → test_logged.rb} +13 -13
- data/test/factbase/test_pre.rb +2 -2
- data/test/factbase/test_query.rb +2 -2
- data/test/factbase/test_rules.rb +2 -2
- data/test/factbase/test_syntax.rb +2 -2
- data/test/factbase/test_tallied.rb +2 -2
- data/test/factbase/test_taped.rb +2 -2
- data/test/factbase/test_tee.rb +2 -2
- data/test/factbase/test_term.rb +2 -2
- data/test/factbase/test_to_json.rb +2 -2
- data/test/factbase/test_to_xml.rb +2 -2
- data/test/factbase/test_to_yaml.rb +2 -2
- data/test/test__helper.rb +3 -1
- data/test/test_factbase.rb +5 -5
- metadata +29 -29
- data/benchmarks/simple.rb +0 -127
@@ -3,14 +3,14 @@
|
|
3
3
|
# SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
|
4
4
|
# SPDX-License-Identifier: MIT
|
5
5
|
|
6
|
-
|
6
|
+
require_relative '../test__helper'
|
7
7
|
require_relative '../../lib/factbase/syntax'
|
8
8
|
|
9
9
|
# Syntax test.
|
10
10
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
11
11
|
# Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
|
12
12
|
# License:: MIT
|
13
|
-
class TestSyntax <
|
13
|
+
class TestSyntax < Factbase::Test
|
14
14
|
def test_parses_string_right
|
15
15
|
[
|
16
16
|
"(foo 'abc')",
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
|
4
4
|
# SPDX-License-Identifier: MIT
|
5
5
|
|
6
|
-
|
6
|
+
require_relative '../test__helper'
|
7
7
|
require 'threads'
|
8
8
|
require_relative '../../lib/factbase'
|
9
9
|
require_relative '../../lib/factbase/tallied'
|
@@ -12,7 +12,7 @@ require_relative '../../lib/factbase/tallied'
|
|
12
12
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
13
13
|
# Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
|
14
14
|
# License:: MIT
|
15
|
-
class TestTallied <
|
15
|
+
class TestTallied < Factbase::Test
|
16
16
|
def test_counts_size
|
17
17
|
fb = Factbase::Tallied.new(Factbase.new)
|
18
18
|
assert_equal(0, fb.size)
|
data/test/factbase/test_taped.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
|
4
4
|
# SPDX-License-Identifier: MIT
|
5
5
|
|
6
|
-
|
6
|
+
require_relative '../test__helper'
|
7
7
|
require_relative '../../lib/factbase'
|
8
8
|
require_relative '../../lib/factbase/taped'
|
9
9
|
|
@@ -11,7 +11,7 @@ require_relative '../../lib/factbase/taped'
|
|
11
11
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
12
12
|
# Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
|
13
13
|
# License:: MIT
|
14
|
-
class TestTaped <
|
14
|
+
class TestTaped < Factbase::Test
|
15
15
|
def test_tracks_insertion
|
16
16
|
t = Factbase::Taped.new([])
|
17
17
|
t << {}
|
data/test/factbase/test_tee.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
|
4
4
|
# SPDX-License-Identifier: MIT
|
5
5
|
|
6
|
-
|
6
|
+
require_relative '../test__helper'
|
7
7
|
require_relative '../../lib/factbase'
|
8
8
|
require_relative '../../lib/factbase/tee'
|
9
9
|
require_relative '../../lib/factbase/fact'
|
@@ -12,7 +12,7 @@ require_relative '../../lib/factbase/fact'
|
|
12
12
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
13
13
|
# Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
|
14
14
|
# License:: MIT
|
15
|
-
class TestTee <
|
15
|
+
class TestTee < Factbase::Test
|
16
16
|
def test_two_facts
|
17
17
|
prim = Factbase::Fact.new(Factbase.new, Mutex.new, {})
|
18
18
|
prim.foo = 42
|
data/test/factbase/test_term.rb
CHANGED
@@ -3,14 +3,14 @@
|
|
3
3
|
# SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
|
4
4
|
# SPDX-License-Identifier: MIT
|
5
5
|
|
6
|
-
|
6
|
+
require_relative '../test__helper'
|
7
7
|
require_relative '../../lib/factbase/term'
|
8
8
|
|
9
9
|
# Term test.
|
10
10
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
11
11
|
# Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
|
12
12
|
# License:: MIT
|
13
|
-
class TestTerm <
|
13
|
+
class TestTerm < Factbase::Test
|
14
14
|
def test_false_matching
|
15
15
|
t = Factbase::Term.new(Factbase.new, :never, [])
|
16
16
|
refute(t.evaluate(fact('foo' => [100]), []))
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
|
4
4
|
# SPDX-License-Identifier: MIT
|
5
5
|
|
6
|
-
|
6
|
+
require_relative '../test__helper'
|
7
7
|
require 'loog'
|
8
8
|
require_relative '../../lib/factbase'
|
9
9
|
require_relative '../../lib/factbase/to_json'
|
@@ -12,7 +12,7 @@ require_relative '../../lib/factbase/to_json'
|
|
12
12
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
13
13
|
# Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
|
14
14
|
# License:: MIT
|
15
|
-
class TestToJSON <
|
15
|
+
class TestToJSON < Factbase::Test
|
16
16
|
def test_simple_rendering
|
17
17
|
fb = Factbase.new
|
18
18
|
f = fb.insert
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
|
4
4
|
# SPDX-License-Identifier: MIT
|
5
5
|
|
6
|
-
|
6
|
+
require_relative '../test__helper'
|
7
7
|
require 'loog'
|
8
8
|
require_relative '../../lib/factbase'
|
9
9
|
require_relative '../../lib/factbase/to_xml'
|
@@ -12,7 +12,7 @@ require_relative '../../lib/factbase/to_xml'
|
|
12
12
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
13
13
|
# Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
|
14
14
|
# License:: MIT
|
15
|
-
class TestToXML <
|
15
|
+
class TestToXML < Factbase::Test
|
16
16
|
def test_simple_rendering
|
17
17
|
fb = Factbase.new
|
18
18
|
fb.insert.t = Time.now
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
|
4
4
|
# SPDX-License-Identifier: MIT
|
5
5
|
|
6
|
-
|
6
|
+
require_relative '../test__helper'
|
7
7
|
require 'loog'
|
8
8
|
require_relative '../../lib/factbase'
|
9
9
|
require_relative '../../lib/factbase/to_yaml'
|
@@ -12,7 +12,7 @@ require_relative '../../lib/factbase/to_yaml'
|
|
12
12
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
13
13
|
# Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
|
14
14
|
# License:: MIT
|
15
|
-
class TestToYAML <
|
15
|
+
class TestToYAML < Factbase::Test
|
16
16
|
def test_simple_rendering
|
17
17
|
fb = Factbase.new
|
18
18
|
f = fb.insert
|
data/test/test__helper.rb
CHANGED
@@ -17,8 +17,10 @@ require 'minitest/autorun'
|
|
17
17
|
require 'minitest/reporters'
|
18
18
|
Minitest::Reporters.use! [Minitest::Reporters::SpecReporter.new]
|
19
19
|
|
20
|
+
require_relative '../lib/factbase'
|
21
|
+
|
20
22
|
# Default methods for all tests.
|
21
|
-
class Minitest::Test
|
23
|
+
class Factbase::Test < Minitest::Test
|
22
24
|
def fact(map = {})
|
23
25
|
require 'factbase/fact'
|
24
26
|
Factbase::Fact.new(Factbase.new, Mutex.new, map)
|
data/test/test_factbase.rb
CHANGED
@@ -3,20 +3,20 @@
|
|
3
3
|
# SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
|
4
4
|
# SPDX-License-Identifier: MIT
|
5
5
|
|
6
|
-
require 'minitest/autorun'
|
7
6
|
require 'loog'
|
8
7
|
require 'threads'
|
9
8
|
require_relative '../lib/factbase'
|
10
|
-
require_relative '../lib/factbase/rules'
|
11
9
|
require_relative '../lib/factbase/inv'
|
10
|
+
require_relative '../lib/factbase/logged'
|
12
11
|
require_relative '../lib/factbase/pre'
|
13
|
-
require_relative '../lib/factbase/
|
12
|
+
require_relative '../lib/factbase/rules'
|
13
|
+
require_relative 'test__helper'
|
14
14
|
|
15
15
|
# Factbase main module test.
|
16
16
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
17
17
|
# Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
|
18
18
|
# License:: MIT
|
19
|
-
class TestFactbase <
|
19
|
+
class TestFactbase < Factbase::Test
|
20
20
|
def test_injects_data_correctly
|
21
21
|
maps = []
|
22
22
|
fb = Factbase.new(maps)
|
@@ -177,7 +177,7 @@ class TestFactbase < Minitest::Test
|
|
177
177
|
Factbase::Rules.new(Factbase.new, '(always)'),
|
178
178
|
Factbase::Inv.new(Factbase.new) { |_, _| true },
|
179
179
|
Factbase::Pre.new(Factbase.new) { |_| true },
|
180
|
-
Factbase::
|
180
|
+
Factbase::Logged.new(Factbase.new, Loog::NULL)
|
181
181
|
].each do |d|
|
182
182
|
f = d.insert
|
183
183
|
f.foo = 42
|
metadata
CHANGED
@@ -1,43 +1,42 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: factbase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yegor Bugayenko
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date: 2025-
|
10
|
+
date: 2025-03-03 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: backtrace
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
16
15
|
requirements:
|
17
|
-
- - "
|
16
|
+
- - ">="
|
18
17
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
18
|
+
version: 0.4.0
|
20
19
|
type: :runtime
|
21
20
|
prerelease: false
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
23
22
|
requirements:
|
24
|
-
- - "
|
23
|
+
- - ">="
|
25
24
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
25
|
+
version: 0.4.0
|
27
26
|
- !ruby/object:Gem::Dependency
|
28
27
|
name: decoor
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
30
29
|
requirements:
|
31
|
-
- - "
|
30
|
+
- - ">="
|
32
31
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
32
|
+
version: 0.0.1
|
34
33
|
type: :runtime
|
35
34
|
prerelease: false
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
37
36
|
requirements:
|
38
|
-
- - "
|
37
|
+
- - ">="
|
39
38
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
39
|
+
version: 0.0.1
|
41
40
|
- !ruby/object:Gem::Dependency
|
42
41
|
name: json
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,16 +55,16 @@ dependencies:
|
|
56
55
|
name: loog
|
57
56
|
requirement: !ruby/object:Gem::Requirement
|
58
57
|
requirements:
|
59
|
-
- - "
|
58
|
+
- - ">="
|
60
59
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
60
|
+
version: 0.6.0
|
62
61
|
type: :runtime
|
63
62
|
prerelease: false
|
64
63
|
version_requirements: !ruby/object:Gem::Requirement
|
65
64
|
requirements:
|
66
|
-
- - "
|
65
|
+
- - ">="
|
67
66
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
67
|
+
version: 0.6.0
|
69
68
|
- !ruby/object:Gem::Dependency
|
70
69
|
name: nokogiri
|
71
70
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,30 +83,30 @@ dependencies:
|
|
84
83
|
name: others
|
85
84
|
requirement: !ruby/object:Gem::Requirement
|
86
85
|
requirements:
|
87
|
-
- - "
|
86
|
+
- - ">="
|
88
87
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
88
|
+
version: 0.0.3
|
90
89
|
type: :runtime
|
91
90
|
prerelease: false
|
92
91
|
version_requirements: !ruby/object:Gem::Requirement
|
93
92
|
requirements:
|
94
|
-
- - "
|
93
|
+
- - ">="
|
95
94
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
95
|
+
version: 0.0.3
|
97
96
|
- !ruby/object:Gem::Dependency
|
98
97
|
name: tago
|
99
98
|
requirement: !ruby/object:Gem::Requirement
|
100
99
|
requirements:
|
101
|
-
- - "
|
100
|
+
- - ">="
|
102
101
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
102
|
+
version: 0.0.2
|
104
103
|
type: :runtime
|
105
104
|
prerelease: false
|
106
105
|
version_requirements: !ruby/object:Gem::Requirement
|
107
106
|
requirements:
|
108
|
-
- - "
|
107
|
+
- - ">="
|
109
108
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
109
|
+
version: 0.0.2
|
111
110
|
- !ruby/object:Gem::Dependency
|
112
111
|
name: yaml
|
113
112
|
requirement: !ruby/object:Gem::Requirement
|
@@ -158,7 +157,10 @@ files:
|
|
158
157
|
- README.md
|
159
158
|
- REUSE.toml
|
160
159
|
- Rakefile
|
161
|
-
-
|
160
|
+
- benchmark/bench_factbase.rb
|
161
|
+
- benchmark/bench_large_query.rb
|
162
|
+
- benchmark/bench_query.rb
|
163
|
+
- benchmark/bench_taped.rb
|
162
164
|
- factbase.gemspec
|
163
165
|
- lib/factbase.rb
|
164
166
|
- lib/factbase/accum.rb
|
@@ -167,7 +169,7 @@ files:
|
|
167
169
|
- lib/factbase/flatten.rb
|
168
170
|
- lib/factbase/inv.rb
|
169
171
|
- lib/factbase/light.rb
|
170
|
-
- lib/factbase/
|
172
|
+
- lib/factbase/logged.rb
|
171
173
|
- lib/factbase/pre.rb
|
172
174
|
- lib/factbase/query.rb
|
173
175
|
- lib/factbase/query_once.rb
|
@@ -209,7 +211,7 @@ files:
|
|
209
211
|
- test/factbase/test_fact.rb
|
210
212
|
- test/factbase/test_flatten.rb
|
211
213
|
- test/factbase/test_inv.rb
|
212
|
-
- test/factbase/
|
214
|
+
- test/factbase/test_logged.rb
|
213
215
|
- test/factbase/test_pre.rb
|
214
216
|
- test/factbase/test_query.rb
|
215
217
|
- test/factbase/test_rules.rb
|
@@ -228,7 +230,6 @@ licenses:
|
|
228
230
|
- MIT
|
229
231
|
metadata:
|
230
232
|
rubygems_mfa_required: 'true'
|
231
|
-
post_install_message:
|
232
233
|
rdoc_options:
|
233
234
|
- "--charset=UTF-8"
|
234
235
|
require_paths:
|
@@ -244,8 +245,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
244
245
|
- !ruby/object:Gem::Version
|
245
246
|
version: '0'
|
246
247
|
requirements: []
|
247
|
-
rubygems_version: 3.
|
248
|
-
signing_key:
|
248
|
+
rubygems_version: 3.6.2
|
249
249
|
specification_version: 4
|
250
250
|
summary: Factbase
|
251
251
|
test_files: []
|
data/benchmarks/simple.rb
DELETED
@@ -1,127 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
# SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
|
5
|
-
# SPDX-License-Identifier: MIT
|
6
|
-
|
7
|
-
require 'benchmark'
|
8
|
-
require 'time'
|
9
|
-
require_relative '../lib/factbase'
|
10
|
-
|
11
|
-
def insert(fb, total)
|
12
|
-
time =
|
13
|
-
Benchmark.measure do
|
14
|
-
total.times do |i|
|
15
|
-
fact = fb.insert
|
16
|
-
fact.id = i
|
17
|
-
fact.title = "Object Thinking #{i}"
|
18
|
-
fact.time = Time.now.iso8601
|
19
|
-
fact.cost = rand(1..100)
|
20
|
-
fact.foo = rand(0.0..100.0).round(3)
|
21
|
-
fact.bar = rand(100..300)
|
22
|
-
fact.seenBy = "User#{i}" if i.even?
|
23
|
-
fact.zzz = "Extra#{i}" if (i % 10).zero?
|
24
|
-
end
|
25
|
-
end
|
26
|
-
{
|
27
|
-
title: '`fb.insert()`',
|
28
|
-
time: time.real,
|
29
|
-
details: "Inserted #{total} facts"
|
30
|
-
}
|
31
|
-
end
|
32
|
-
|
33
|
-
def query(fb, query)
|
34
|
-
total = 0
|
35
|
-
runs = 100
|
36
|
-
time =
|
37
|
-
Benchmark.measure do
|
38
|
-
runs.times do
|
39
|
-
total = fb.query(query).each.to_a.size
|
40
|
-
end
|
41
|
-
end
|
42
|
-
{
|
43
|
-
title: "`#{query}`",
|
44
|
-
time: time.real.round(6),
|
45
|
-
details: "#{total} facts x#{runs}"
|
46
|
-
}
|
47
|
-
end
|
48
|
-
|
49
|
-
def delete(fb, query)
|
50
|
-
total = 0
|
51
|
-
time =
|
52
|
-
Benchmark.measure do
|
53
|
-
total = fb.query(query).delete!
|
54
|
-
end
|
55
|
-
{
|
56
|
-
title: "`#{query}`",
|
57
|
-
time: time.real.round(6),
|
58
|
-
details: "Deleted #{total} fact(s)"
|
59
|
-
}
|
60
|
-
end
|
61
|
-
|
62
|
-
def impex(fb)
|
63
|
-
size = 0
|
64
|
-
time =
|
65
|
-
Benchmark.measure do
|
66
|
-
bin = fb.export
|
67
|
-
size = bin.size
|
68
|
-
fb2 = Factbase.new
|
69
|
-
fb2.import(bin)
|
70
|
-
end
|
71
|
-
{
|
72
|
-
title: '`.export()` + `.import()`',
|
73
|
-
time: time.real,
|
74
|
-
details: "#{size} bytes"
|
75
|
-
}
|
76
|
-
end
|
77
|
-
|
78
|
-
def txn(fb, scenario, &block)
|
79
|
-
modified = 0
|
80
|
-
time =
|
81
|
-
Benchmark.measure do
|
82
|
-
modified = fb.txn(&block)
|
83
|
-
end
|
84
|
-
{
|
85
|
-
title: "txn: `#{scenario}`",
|
86
|
-
time: time.real,
|
87
|
-
details: modified.to_s
|
88
|
-
}
|
89
|
-
end
|
90
|
-
|
91
|
-
fb = Factbase.new
|
92
|
-
rows = [
|
93
|
-
insert(fb, 25_000),
|
94
|
-
query(fb, '(gt time \'2024-03-23T03:21:43Z\')'),
|
95
|
-
query(fb, '(gt cost 50)'),
|
96
|
-
query(fb, '(eq title \'Object Thinking 5000\')'),
|
97
|
-
query(fb, '(and (eq foo 42.998) (or (gt bar 200) (absent zzz)))'),
|
98
|
-
query(fb, '(eq id (agg (always) (max id)))'),
|
99
|
-
query(fb, '(join "c<=cost,b<=bar" (eq id (agg (always) (max id))))'),
|
100
|
-
txn(fb, 'query()') do |fbt|
|
101
|
-
100.times do |i|
|
102
|
-
fbt.query("(gt foo #{i})").each.to_a
|
103
|
-
end
|
104
|
-
end,
|
105
|
-
txn(fb, 'insert()') do |fbt|
|
106
|
-
100.times do
|
107
|
-
fbt.insert
|
108
|
-
end
|
109
|
-
end,
|
110
|
-
txn(fb, 'add()') do |fbt|
|
111
|
-
100.times do |i|
|
112
|
-
fbt.query("(gt foo #{i})").each.to_a.first.bar = 55
|
113
|
-
end
|
114
|
-
end,
|
115
|
-
txn(fb, 'delete!()') do |fbt|
|
116
|
-
50.times do |i|
|
117
|
-
fbt.query("(gt foo #{100 - i})").delete!
|
118
|
-
end
|
119
|
-
end,
|
120
|
-
impex(fb),
|
121
|
-
delete(fb, '(gt cost 3)'),
|
122
|
-
delete(fb, '(gt bar 1)')
|
123
|
-
].map { |r| "| #{r[:title]} | #{format('%0.3f', r[:time])} | #{r[:details]} |" }
|
124
|
-
|
125
|
-
puts '| Action | Seconds | Details |'
|
126
|
-
puts '| --- | --: | --- |'
|
127
|
-
rows.each { |row| puts row }
|