serialbench 0.2.0 → 0.4.0

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.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.github/scripts/push-to-data.sh +65 -0
  3. data/.github/workflows/benchmark.yml +98 -172
  4. data/.github/workflows/release.yml +68 -13
  5. data/Gemfile +1 -1
  6. data/config/benchmarks/full-json.yml +25 -0
  7. data/config/benchmarks/full-toml.yml +25 -0
  8. data/config/benchmarks/full-xml.yml +26 -0
  9. data/config/benchmarks/full-yaml.yml +25 -0
  10. data/config/benchmarks/full.yml +9 -4
  11. data/lib/serialbench/benchmark_runner.rb +32 -320
  12. data/lib/serialbench/cli/benchmark_cli.rb +1 -1
  13. data/lib/serialbench/cli.rb +0 -12
  14. data/lib/serialbench/models/benchmark_result.rb +2 -0
  15. data/lib/serialbench/models/result_store.rb +0 -38
  16. data/lib/serialbench/models.rb +0 -5
  17. data/lib/serialbench/serializers/base_serializer.rb +11 -3
  18. data/lib/serialbench/serializers/json/base_json_serializer.rb +8 -20
  19. data/lib/serialbench/serializers/json/json_serializer.rb +0 -16
  20. data/lib/serialbench/serializers/json/oj_serializer.rb +2 -17
  21. data/lib/serialbench/serializers/json/yajl_serializer.rb +2 -2
  22. data/lib/serialbench/serializers/toml/base_toml_serializer.rb +8 -29
  23. data/lib/serialbench/serializers/toml/toml_rb_serializer.rb +0 -16
  24. data/lib/serialbench/serializers/toml/tomlib_serializer.rb +0 -4
  25. data/lib/serialbench/serializers/toml/tomlrb_serializer.rb +2 -18
  26. data/lib/serialbench/serializers/xml/base_xml_serializer.rb +10 -26
  27. data/lib/serialbench/serializers/xml/leptris_serializer.rb +13 -10
  28. data/lib/serialbench/serializers/xml/libxml_serializer.rb +4 -9
  29. data/lib/serialbench/serializers/xml/nokogiri_serializer.rb +4 -9
  30. data/lib/serialbench/serializers/xml/oga_serializer.rb +6 -4
  31. data/lib/serialbench/serializers/xml/ox_serializer.rb +2 -2
  32. data/lib/serialbench/serializers/xml/rexml_serializer.rb +5 -12
  33. data/lib/serialbench/serializers/yaml/base_yaml_serializer.rb +1 -9
  34. data/lib/serialbench/serializers/yaml/syck_serializer.rb +0 -8
  35. data/lib/serialbench/test_data.rb +315 -0
  36. data/lib/serialbench/version.rb +1 -1
  37. data/lib/serialbench.rb +2 -1
  38. data/serialbench.gemspec +1 -2
  39. metadata +13 -59
  40. data/lib/serialbench/cli/resultset_cli.rb +0 -301
  41. data/lib/serialbench/models/result_set.rb +0 -79
  42. data/lib/serialbench/site_generator.rb +0 -337
  43. data/lib/serialbench/templates/assets/css/benchmark_report.css +0 -535
  44. data/lib/serialbench/templates/assets/css/format_based.css +0 -474
  45. data/lib/serialbench/templates/assets/css/themes.css +0 -589
  46. data/lib/serialbench/templates/assets/js/chart_helpers.js +0 -411
  47. data/lib/serialbench/templates/assets/js/dashboard.js +0 -795
  48. data/lib/serialbench/templates/assets/js/navigation.js +0 -142
  49. data/lib/serialbench/templates/base.liquid +0 -49
  50. data/lib/serialbench/templates/format_based.liquid +0 -507
  51. data/lib/serialbench/templates/partials/chart_section.liquid +0 -4
  52. data/site/.gitignore +0 -5
  53. data/site/README.md +0 -32
  54. data/site/astro.config.mjs +0 -12
  55. data/site/package-lock.json +0 -6160
  56. data/site/package.json +0 -22
  57. data/site/public/favicon.svg +0 -4
  58. data/site/scripts/gen-sample-data.mjs +0 -154
  59. data/site/src/components/AvailabilityMatrix.astro +0 -61
  60. data/site/src/components/CalibratedLeaderboard.vue +0 -134
  61. data/site/src/components/CitationBox.vue +0 -50
  62. data/site/src/components/DashboardConsole.vue +0 -193
  63. data/site/src/components/FeaturesTable.astro +0 -97
  64. data/site/src/components/MemoryPanel.vue +0 -44
  65. data/site/src/components/OpsChart.vue +0 -135
  66. data/site/src/config.ts +0 -18
  67. data/site/src/layouts/Layout.astro +0 -85
  68. data/site/src/lib/channels.ts +0 -24
  69. data/site/src/lib/dashboard.ts +0 -269
  70. data/site/src/pages/index.astro +0 -44
  71. data/site/src/pages/library/[slug].astro +0 -128
  72. data/site/src/pages/methodology.astro +0 -55
  73. data/site/src/styles/global.css +0 -103
  74. data/site/tsconfig.json +0 -5
@@ -1,589 +0,0 @@
1
- /* Modern Dark Marine/Orange Theme with Light/Dark Mode Support */
2
-
3
- /* CSS Custom Properties for Theme System */
4
- :root {
5
- /* Dark Marine Theme (Default) */
6
- --bg-primary: #0F172A;
7
- --bg-secondary: #1E293B;
8
- --bg-tertiary: #334155;
9
- --bg-card: #1E293B;
10
- --bg-hover: #334155;
11
-
12
- /* Orange Accent Colors */
13
- --accent-primary: #F97316;
14
- --accent-secondary: #EA580C;
15
- --accent-tertiary: #FB923C;
16
- --accent-light: #FED7AA;
17
-
18
- /* Text Colors */
19
- --text-primary: #F8FAFC;
20
- --text-secondary: #CBD5E1;
21
- --text-muted: #64748B;
22
- --text-inverse: #0F172A;
23
-
24
- /* Border Colors */
25
- --border-primary: #475569;
26
- --border-secondary: #334155;
27
- --border-accent: #F97316;
28
-
29
- /* Status Colors */
30
- --success: #10B981;
31
- --warning: #F59E0B;
32
- --error: #EF4444;
33
- --info: #3B82F6;
34
-
35
- /* Shadows */
36
- --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.3);
37
- --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.4);
38
- --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.5);
39
- --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.6);
40
-
41
- /* Gradients */
42
- --gradient-primary: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary));
43
- --gradient-secondary: linear-gradient(135deg, var(--bg-secondary), var(--bg-tertiary));
44
- --gradient-accent: linear-gradient(135deg, var(--accent-tertiary), var(--accent-primary));
45
-
46
- /* Spacing */
47
- --space-xs: 0.25rem;
48
- --space-sm: 0.5rem;
49
- --space-md: 1rem;
50
- --space-lg: 1.5rem;
51
- --space-xl: 2rem;
52
- --space-2xl: 3rem;
53
-
54
- /* Border Radius */
55
- --radius-sm: 0.375rem;
56
- --radius-md: 0.5rem;
57
- --radius-lg: 0.75rem;
58
- --radius-xl: 1rem;
59
- --radius-full: 9999px;
60
-
61
- /* Typography */
62
- --font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
63
- --font-mono: 'JetBrains Mono', 'Fira Code', Consolas, monospace;
64
-
65
- /* Transitions */
66
- --transition-fast: 0.15s ease-in-out;
67
- --transition-normal: 0.3s ease-in-out;
68
- --transition-slow: 0.5s ease-in-out;
69
- }
70
-
71
- /* Light Theme Override */
72
- [data-theme="light"] {
73
- --bg-primary: #FFFFFF;
74
- --bg-secondary: #F8FAFC;
75
- --bg-tertiary: #E2E8F0;
76
- --bg-card: #FFFFFF;
77
- --bg-hover: #F1F5F9;
78
-
79
- --text-primary: #0F172A;
80
- --text-secondary: #334155;
81
- --text-muted: #64748B;
82
- --text-inverse: #FFFFFF;
83
-
84
- --border-primary: #E2E8F0;
85
- --border-secondary: #CBD5E1;
86
-
87
- --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
88
- --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
89
- --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
90
- --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
91
- }
92
-
93
- /* Base Styles */
94
- * {
95
- box-sizing: border-box;
96
- }
97
-
98
- html {
99
- font-family: var(--font-family);
100
- line-height: 1.6;
101
- -webkit-font-smoothing: antialiased;
102
- -moz-osx-font-smoothing: grayscale;
103
- }
104
-
105
- body {
106
- margin: 0;
107
- padding: 0;
108
- background: var(--bg-primary);
109
- color: var(--text-primary);
110
- transition: background-color var(--transition-normal), color var(--transition-normal);
111
- min-height: 100vh;
112
- }
113
-
114
- /* Navigation Bar */
115
- .navbar {
116
- background: var(--bg-secondary);
117
- border-bottom: 1px solid var(--border-primary);
118
- box-shadow: var(--shadow-md);
119
- position: sticky;
120
- top: 0;
121
- z-index: 1000;
122
- backdrop-filter: blur(10px);
123
- }
124
-
125
- .navbar-container {
126
- max-width: 1400px;
127
- margin: 0 auto;
128
- padding: 0 var(--space-lg);
129
- }
130
-
131
- .navbar-header {
132
- display: flex;
133
- justify-content: space-between;
134
- align-items: center;
135
- padding: var(--space-md) 0;
136
- }
137
-
138
- .navbar-brand {
139
- display: flex;
140
- align-items: center;
141
- gap: var(--space-sm);
142
- font-size: 1.5rem;
143
- font-weight: 700;
144
- color: var(--text-primary);
145
- text-decoration: none;
146
- }
147
-
148
- .navbar-brand-icon {
149
- width: 32px;
150
- height: 32px;
151
- background: var(--gradient-primary);
152
- border-radius: var(--radius-md);
153
- display: flex;
154
- align-items: center;
155
- justify-content: center;
156
- color: white;
157
- }
158
-
159
- .navbar-controls {
160
- display: flex;
161
- align-items: center;
162
- gap: var(--space-md);
163
- }
164
-
165
- /* Theme Toggle */
166
- .theme-toggle {
167
- background: var(--bg-tertiary);
168
- border: 1px solid var(--border-primary);
169
- border-radius: var(--radius-full);
170
- padding: var(--space-sm);
171
- cursor: pointer;
172
- transition: all var(--transition-fast);
173
- display: flex;
174
- align-items: center;
175
- justify-content: center;
176
- width: 40px;
177
- height: 40px;
178
- }
179
-
180
- .theme-toggle:hover {
181
- background: var(--bg-hover);
182
- transform: scale(1.05);
183
- }
184
-
185
- .theme-toggle svg {
186
- width: 20px;
187
- height: 20px;
188
- color: var(--text-secondary);
189
- transition: color var(--transition-fast);
190
- }
191
-
192
- /* Filter Bar */
193
- .filter-bar {
194
- /* background: var(--bg-tertiary); */
195
- border-bottom: 1px solid var(--border-primary);
196
- padding: var(--space-md) 0;
197
- }
198
-
199
- .filter-container {
200
- display: flex;
201
- align-items: center;
202
- gap: var(--space-lg);
203
- flex-wrap: wrap;
204
- }
205
-
206
- .filter-group {
207
- display: flex;
208
- align-items: center;
209
- gap: var(--space-sm);
210
- }
211
-
212
- .filter-label {
213
- font-size: 0.875rem;
214
- font-weight: 600;
215
- color: var(--text-secondary);
216
- white-space: nowrap;
217
- }
218
-
219
- /* Custom Select Styling */
220
- .custom-select {
221
- position: relative;
222
- min-width: 150px;
223
- }
224
-
225
- .custom-select select {
226
- width: 100%;
227
- padding: var(--space-sm) var(--space-md);
228
- background: var(--bg-card);
229
- border: 1px solid var(--border-primary);
230
- border-radius: var(--radius-md);
231
- color: var(--text-primary);
232
- font-size: 0.875rem;
233
- cursor: pointer;
234
- transition: all var(--transition-fast);
235
- appearance: none;
236
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e");
237
- background-position: right var(--space-sm) center;
238
- background-repeat: no-repeat;
239
- background-size: 16px;
240
- padding-right: 2.5rem;
241
- }
242
-
243
- .custom-select select:focus {
244
- outline: none;
245
- border-color: var(--accent-primary);
246
- box-shadow: 0 0 0 3px rgba(249, 115, 22, 0.1);
247
- }
248
-
249
- .custom-select select:hover {
250
- border-color: var(--border-accent);
251
- }
252
-
253
- /* Format Tabs */
254
- .format-tabs {
255
- display: flex;
256
- gap: var(--space-xs);
257
- margin-left: auto;
258
- }
259
-
260
- .format-tab {
261
- padding: var(--space-sm) var(--space-lg);
262
- background: var(--bg-card);
263
- border: 1px solid var(--border-primary);
264
- border-radius: var(--radius-md);
265
- color: var(--text-secondary);
266
- font-size: 0.875rem;
267
- font-weight: 600;
268
- cursor: pointer;
269
- transition: all var(--transition-fast);
270
- text-transform: uppercase;
271
- letter-spacing: 0.05em;
272
- }
273
-
274
- .format-tab:hover:not(.active) {
275
- background: var(--bg-tertiary);
276
- color: var(--text-primary);
277
- border-color: var(--border-secondary);
278
- transform: translateY(-1px);
279
- }
280
-
281
- .format-tab.active {
282
- background: var(--accent-primary);
283
- border-color: var(--accent-primary);
284
- color: white;
285
- box-shadow: var(--shadow-md);
286
- }
287
-
288
- /* Main Content */
289
- .main-content {
290
- max-width: 1400px;
291
- margin: 0 auto;
292
- padding: var(--space-xl) var(--space-lg);
293
- }
294
-
295
- /* Dashboard Grid */
296
- .dashboard-grid {
297
- display: grid;
298
- grid-template-columns: repeat(2, 1fr);
299
- gap: var(--space-xl);
300
- margin-bottom: var(--space-2xl);
301
- }
302
-
303
- /* Chart Cards */
304
- .chart-card {
305
- background: var(--bg-card);
306
- border: 1px solid var(--border-primary);
307
- border-radius: var(--radius-lg);
308
- padding: var(--space-xl);
309
- box-shadow: var(--shadow-md);
310
- transition: all var(--transition-normal);
311
- position: relative;
312
- overflow: hidden;
313
- }
314
-
315
- .chart-card::before {
316
- content: '';
317
- position: absolute;
318
- top: 0;
319
- left: 0;
320
- right: 0;
321
- height: 3px;
322
- background: var(--gradient-primary);
323
- }
324
-
325
- .chart-card:hover {
326
- transform: translateY(-2px);
327
- box-shadow: var(--shadow-lg);
328
- }
329
-
330
- .chart-header {
331
- display: flex;
332
- justify-content: between;
333
- align-items: center;
334
- margin-bottom: var(--space-lg);
335
- }
336
-
337
- .chart-title {
338
- font-size: 1.25rem;
339
- font-weight: 700;
340
- color: var(--text-primary);
341
- margin: 0;
342
- }
343
-
344
- .chart-subtitle {
345
- font-size: 0.875rem;
346
- color: var(--text-muted);
347
- margin: var(--space-xs) 0 0 0;
348
- }
349
-
350
- .chart-container {
351
- position: relative;
352
- height: 300px;
353
- margin-bottom: var(--space-md);
354
- }
355
-
356
- .chart-container canvas {
357
- max-width: 100%;
358
- height: auto;
359
- }
360
-
361
- /* Loading and Error States */
362
- .chart-loading,
363
- .chart-error {
364
- display: flex;
365
- align-items: center;
366
- justify-content: center;
367
- height: 300px;
368
- color: var(--text-muted);
369
- font-style: italic;
370
- }
371
-
372
- .chart-error {
373
- color: var(--error);
374
- }
375
-
376
- /* Summary Section */
377
- .summary-section {
378
- background: var(--bg-card);
379
- border: 1px solid var(--border-primary);
380
- border-radius: var(--radius-lg);
381
- padding: var(--space-xl);
382
- margin-bottom: var(--space-2xl);
383
- box-shadow: var(--shadow-md);
384
- }
385
-
386
- .summary-title {
387
- font-size: 1.5rem;
388
- font-weight: 700;
389
- color: var(--text-primary);
390
- margin-bottom: var(--space-lg);
391
- }
392
-
393
- .summary-grid {
394
- display: grid;
395
- grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
396
- gap: var(--space-lg);
397
- }
398
-
399
- .summary-card {
400
- background: var(--bg-secondary);
401
- border: 1px solid var(--border-secondary);
402
- border-radius: var(--radius-md);
403
- padding: var(--space-lg);
404
- transition: all var(--transition-fast);
405
- }
406
-
407
- .summary-card:hover {
408
- transform: translateY(-1px);
409
- box-shadow: var(--shadow-md);
410
- }
411
-
412
- .summary-card-title {
413
- font-size: 1.125rem;
414
- font-weight: 600;
415
- color: var(--accent-primary);
416
- margin-bottom: var(--space-md);
417
- }
418
-
419
- /* Environment Section */
420
- .environment-section {
421
- background: var(--bg-card);
422
- border: 1px solid var(--border-primary);
423
- border-radius: var(--radius-lg);
424
- padding: var(--space-xl);
425
- box-shadow: var(--shadow-md);
426
- }
427
-
428
- .environment-grid {
429
- display: grid;
430
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
431
- gap: var(--space-lg);
432
- }
433
-
434
- .environment-card {
435
- background: var(--bg-secondary);
436
- border: 1px solid var(--border-secondary);
437
- border-radius: var(--radius-md);
438
- padding: var(--space-lg);
439
- transition: all var(--transition-fast);
440
- }
441
-
442
- .environment-card:hover {
443
- transform: translateY(-1px);
444
- box-shadow: var(--shadow-md);
445
- }
446
-
447
- .environment-card-title {
448
- font-size: 1.125rem;
449
- font-weight: 600;
450
- color: var(--text-primary);
451
- margin-bottom: var(--space-md);
452
- }
453
-
454
- /* Responsive Design */
455
- @media (max-width: 1024px) {
456
- .dashboard-grid {
457
- grid-template-columns: 1fr;
458
- }
459
-
460
- .filter-container {
461
- flex-direction: column;
462
- align-items: stretch;
463
- gap: var(--space-md);
464
- }
465
-
466
- .format-tabs {
467
- margin-left: 0;
468
- justify-content: center;
469
- }
470
- }
471
-
472
- @media (max-width: 768px) {
473
- .navbar-header {
474
- flex-direction: column;
475
- gap: var(--space-md);
476
- }
477
-
478
- .navbar-controls {
479
- order: -1;
480
- align-self: flex-end;
481
- }
482
-
483
- .main-content {
484
- padding: var(--space-lg) var(--space-md);
485
- }
486
-
487
- .chart-card {
488
- padding: var(--space-lg);
489
- }
490
-
491
- .chart-container {
492
- height: 250px;
493
- }
494
- }
495
-
496
- @media (max-width: 480px) {
497
- .format-tabs {
498
- flex-direction: column;
499
- width: 100%;
500
- }
501
-
502
- .format-tab {
503
- width: 100%;
504
- text-align: center;
505
- }
506
-
507
- .summary-grid,
508
- .environment-grid {
509
- grid-template-columns: 1fr;
510
- }
511
- }
512
-
513
- /* Animations */
514
- @keyframes fadeInUp {
515
- from {
516
- opacity: 0;
517
- transform: translateY(20px);
518
- }
519
- to {
520
- opacity: 1;
521
- transform: translateY(0);
522
- }
523
- }
524
-
525
- @keyframes slideInRight {
526
- from {
527
- opacity: 0;
528
- transform: translateX(20px);
529
- }
530
- to {
531
- opacity: 1;
532
- transform: translateX(0);
533
- }
534
- }
535
-
536
- .fade-in-up {
537
- animation: fadeInUp 0.6s ease-out;
538
- }
539
-
540
- .slide-in-right {
541
- animation: slideInRight 0.4s ease-out;
542
- }
543
-
544
- /* Utility Classes */
545
- .hidden {
546
- display: none !important;
547
- }
548
-
549
- .sr-only {
550
- position: absolute;
551
- width: 1px;
552
- height: 1px;
553
- padding: 0;
554
- margin: -1px;
555
- overflow: hidden;
556
- clip: rect(0, 0, 0, 0);
557
- white-space: nowrap;
558
- border: 0;
559
- }
560
-
561
- /* Focus Styles for Accessibility */
562
- *:focus {
563
- outline: 2px solid var(--accent-primary);
564
- outline-offset: 2px;
565
- }
566
-
567
- button:focus,
568
- select:focus {
569
- outline-offset: 0;
570
- }
571
-
572
- /* High Contrast Mode Support */
573
- @media (prefers-contrast: high) {
574
- :root {
575
- --border-primary: var(--text-primary);
576
- --border-secondary: var(--text-secondary);
577
- }
578
- }
579
-
580
- /* Reduced Motion Support */
581
- @media (prefers-reduced-motion: reduce) {
582
- *,
583
- *::before,
584
- *::after {
585
- animation-duration: 0.01ms !important;
586
- animation-iteration-count: 1 !important;
587
- transition-duration: 0.01ms !important;
588
- }
589
- }