From 12a10b187ea5b9966222e07c3112974f9aaf6483 Mon Sep 17 00:00:00 2001 From: Martin Dias Date: Wed, 3 Dec 2025 16:48:56 -0300 Subject: [PATCH] Revamp Fuel-Benchmarks package and tests (Pharo 14) --- ...alizationAndMaterializationOfAllSamples.st | 2 +- .../properties.json | 2 +- .../FLSampleFactoryTest.class/properties.json | 2 +- .../monticello.meta/categories.st | 2 +- .../monticello.meta/package | 2 +- .../class/title.content..st | 7 ---- .../instance/printOn..st | 5 ++- .../instance/problemSize..st | 4 +++ .../instance/problemSize.st | 4 +++ .../FLBenchmarkSample.class/properties.json | 3 +- .../instance/dateAndTimes.st | 12 +++---- .../instance/times.st | 6 ++-- .../instance/compiledMethods.st | 9 ++--- .../instance/methodDictionaries.st | 5 ++- .../class/exampleBenchSerialization.st | 33 +++++++++++++++++++ .../class/sampleNamed..st | 4 ++- .../class/sampleNamed.problemSize..st | 7 ++++ .../class/samplesNamed..st | 8 ++--- .../class/samplesNamed.problemSize..st | 6 ++++ .../class/samplesProblemSize..st | 4 +++ .../instance/asSample.st | 8 +++-- .../instance/fewSystemClasses.st | 10 +++--- .../instance/problemSize..st | 4 +-- .../instance/selector..st | 4 +-- .../instance/completeGraph.st | 2 +- .../instance/globals.st | 12 ++++--- .../monticello.meta/categories.st | 5 +-- 27 files changed, 113 insertions(+), 59 deletions(-) delete mode 100644 repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/class/title.content..st create mode 100644 repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/instance/problemSize..st create mode 100644 repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/instance/problemSize.st create mode 100644 repository/Fuel-Benchmarks.package/FLSMarkSuite.class/class/exampleBenchSerialization.st create mode 100644 repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/sampleNamed.problemSize..st create mode 100644 repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/samplesNamed.problemSize..st create mode 100644 repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/samplesProblemSize..st diff --git a/repository/Fuel-Benchmarks-Tests.package/FLBenchmarkSampleTest.class/instance/testSerializationAndMaterializationOfAllSamples.st b/repository/Fuel-Benchmarks-Tests.package/FLBenchmarkSampleTest.class/instance/testSerializationAndMaterializationOfAllSamples.st index b830a697..8bb9e950 100644 --- a/repository/Fuel-Benchmarks-Tests.package/FLBenchmarkSampleTest.class/instance/testSerializationAndMaterializationOfAllSamples.st +++ b/repository/Fuel-Benchmarks-Tests.package/FLBenchmarkSampleTest.class/instance/testSerializationAndMaterializationOfAllSamples.st @@ -2,5 +2,5 @@ tests testSerializationAndMaterializationOfAllSamples "Tests that the result of serialization and materialization of every sample does not raise an error and that it has the expected size. Would be nice to check if the result is equal but many classes do not have = well defined for us." - FLSampleFactory allSamples + FLSampleFactory "allSamples" allNonMetalevelSamples do: [ :aSample | self testSample: aSample ] \ No newline at end of file diff --git a/repository/Fuel-Benchmarks-Tests.package/FLBenchmarkSampleTest.class/properties.json b/repository/Fuel-Benchmarks-Tests.package/FLBenchmarkSampleTest.class/properties.json index 6e0f6d79..47838031 100644 --- a/repository/Fuel-Benchmarks-Tests.package/FLBenchmarkSampleTest.class/properties.json +++ b/repository/Fuel-Benchmarks-Tests.package/FLBenchmarkSampleTest.class/properties.json @@ -8,4 +8,4 @@ "instvars" : [ ], "name" : "FLBenchmarkSampleTest", "type" : "normal" -} +} \ No newline at end of file diff --git a/repository/Fuel-Benchmarks-Tests.package/FLSampleFactoryTest.class/properties.json b/repository/Fuel-Benchmarks-Tests.package/FLSampleFactoryTest.class/properties.json index f208e1ee..a8df074b 100644 --- a/repository/Fuel-Benchmarks-Tests.package/FLSampleFactoryTest.class/properties.json +++ b/repository/Fuel-Benchmarks-Tests.package/FLSampleFactoryTest.class/properties.json @@ -8,4 +8,4 @@ "instvars" : [ ], "name" : "FLSampleFactoryTest", "type" : "normal" -} +} \ No newline at end of file diff --git a/repository/Fuel-Benchmarks-Tests.package/monticello.meta/categories.st b/repository/Fuel-Benchmarks-Tests.package/monticello.meta/categories.st index a01f13b3..f6a6fe90 100644 --- a/repository/Fuel-Benchmarks-Tests.package/monticello.meta/categories.st +++ b/repository/Fuel-Benchmarks-Tests.package/monticello.meta/categories.st @@ -1 +1 @@ -SystemOrganization addCategory: #'Fuel-Benchmarks-Tests'! +self packageOrganizer ensurePackage: #'Fuel-Benchmarks-Tests' withTags: #()! diff --git a/repository/Fuel-Benchmarks-Tests.package/monticello.meta/package b/repository/Fuel-Benchmarks-Tests.package/monticello.meta/package index bb486b1e..6631a548 100644 --- a/repository/Fuel-Benchmarks-Tests.package/monticello.meta/package +++ b/repository/Fuel-Benchmarks-Tests.package/monticello.meta/package @@ -1 +1 @@ -(name 'Fuel-Benchmarks-Tests') +(name 'Fuel-Benchmarks-Tests') \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/class/title.content..st b/repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/class/title.content..st deleted file mode 100644 index ac7987e1..00000000 --- a/repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/class/title.content..st +++ /dev/null @@ -1,7 +0,0 @@ -instance creation -title: aTitle content: aContent - - ^ self new - title: aTitle; - content: aContent; - yourself \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/instance/printOn..st b/repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/instance/printOn..st index e7c74945..e7a8577c 100644 --- a/repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/instance/printOn..st +++ b/repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/instance/printOn..st @@ -5,4 +5,7 @@ printOn: aStream super printOn: aStream. aStream nextPutAll: ' title: '; - print: title \ No newline at end of file + print: title. + aStream + nextPutAll: ' problemSize: '; + print: problemSize \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/instance/problemSize..st b/repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/instance/problemSize..st new file mode 100644 index 00000000..23dc2c4b --- /dev/null +++ b/repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/instance/problemSize..st @@ -0,0 +1,4 @@ +accessing +problemSize: aNumber + + problemSize := aNumber \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/instance/problemSize.st b/repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/instance/problemSize.st new file mode 100644 index 00000000..55f5cf46 --- /dev/null +++ b/repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/instance/problemSize.st @@ -0,0 +1,4 @@ +accessing +problemSize + + ^ problemSize \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/properties.json b/repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/properties.json index 31d32e3a..96bbdf08 100644 --- a/repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/properties.json +++ b/repository/Fuel-Benchmarks.package/FLBenchmarkSample.class/properties.json @@ -7,7 +7,8 @@ "classvars" : [ ], "instvars" : [ "content", - "title" + "title", + "problemSize" ], "name" : "FLBenchmarkSample", "type" : "normal" diff --git a/repository/Fuel-Benchmarks.package/FLCommonSampleFactory.class/instance/dateAndTimes.st b/repository/Fuel-Benchmarks.package/FLCommonSampleFactory.class/instance/dateAndTimes.st index ea76910b..9b3a07e1 100644 --- a/repository/Fuel-Benchmarks.package/FLCommonSampleFactory.class/instance/dateAndTimes.st +++ b/repository/Fuel-Benchmarks.package/FLCommonSampleFactory.class/instance/dateAndTimes.st @@ -1,11 +1,9 @@ samples dateAndTimes - | initialTime initialDate | - initialTime := Time fromSeconds: 76020. + | initialDate | initialDate := Date fromSeconds: 3492288000. - ^ (1 to: self problemSize) - collect: [:index | - DateAndTime - date: (initialDate subtractDays: index) - time: (initialTime addSeconds: index) ]. + ^ (1 to: self problemSize) collect: [:index | + DateAndTime + date: (initialDate subtractDays: index) + time: (Time fromSeconds: index \\ (60*60*24)) ]. diff --git a/repository/Fuel-Benchmarks.package/FLCommonSampleFactory.class/instance/times.st b/repository/Fuel-Benchmarks.package/FLCommonSampleFactory.class/instance/times.st index fd44e06a..be1e5cf0 100644 --- a/repository/Fuel-Benchmarks.package/FLCommonSampleFactory.class/instance/times.st +++ b/repository/Fuel-Benchmarks.package/FLCommonSampleFactory.class/instance/times.st @@ -1,7 +1,5 @@ samples times - | initialTime | - initialTime := Time fromSeconds: 76020. - ^ (1 to: self problemSize) - collect: [ :index | initialTime addSeconds: index ]. + ^ (1 to: self problemSize) collect: [ :index | + Time seconds: index \\ (60*60*24) nanoSeconds: index ] \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/FLMetalevelFactory.class/instance/compiledMethods.st b/repository/Fuel-Benchmarks.package/FLMetalevelFactory.class/instance/compiledMethods.st index 1834318b..15179ea8 100644 --- a/repository/Fuel-Benchmarks.package/FLMetalevelFactory.class/instance/compiledMethods.st +++ b/repository/Fuel-Benchmarks.package/FLMetalevelFactory.class/instance/compiledMethods.st @@ -2,7 +2,8 @@ samples compiledMethods | methods | - methods := self fewSystemClasses inject: Array new into: [ :array :aClass | array, aClass methods ]. - - ^ (1 to: self problemSize) - collect: [ :i | (methods atWrap: i) copy ] + methods := self fewSystemClasses + flatCollect: [ :each | each methods reject: #isNamedPrimitive ] + as: Array. + + ^ (1 to: self problemSize) collect: [ :i | (methods atWrap: i) copy ] \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/FLMetalevelFactory.class/instance/methodDictionaries.st b/repository/Fuel-Benchmarks.package/FLMetalevelFactory.class/instance/methodDictionaries.st index 866dd66b..4a6bef38 100644 --- a/repository/Fuel-Benchmarks.package/FLMetalevelFactory.class/instance/methodDictionaries.st +++ b/repository/Fuel-Benchmarks.package/FLMetalevelFactory.class/instance/methodDictionaries.st @@ -3,6 +3,5 @@ methodDictionaries | methodDicts | methodDicts := self fewSystemClasses collect: [ :aClass | aClass methodDict ]. - ^ (1 to: self problemSize) - collect: [ :i | (methodDicts atWrap: i) copy ] - \ No newline at end of file + + ^ (1 to: self problemSize) collect: [ :i | (methodDicts atWrap: i) copy ] \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/FLSMarkSuite.class/class/exampleBenchSerialization.st b/repository/Fuel-Benchmarks.package/FLSMarkSuite.class/class/exampleBenchSerialization.st new file mode 100644 index 00000000..092daeef --- /dev/null +++ b/repository/Fuel-Benchmarks.package/FLSMarkSuite.class/class/exampleBenchSerialization.st @@ -0,0 +1,33 @@ +examples +exampleBenchSerialization + + | samples runner | + { 50. 500. 5000. 50000. "500000" } do: [ :problemSize | + samples := Array streamContents: [ :stream | + { + FLNumberSampleFactory. #smallIntegers. + FLStructureSampleFactory. #completeGraph. + FLStructureSampleFactory. #regularGraphOfFixedDegree. + FLCommonSampleFactory. #points. + FLNumberSampleFactory. #floats. + } pairsDo: [ :a :b | + stream nextPut: (a sampleNamed: b problemSize: problemSize) ] ]. + + runner := SMarkCogRunner new. + runner iterations: 3. + runner problemSize: problemSize. + + samples do: [ :each | + | suite | + "ScriptConsole << 'ProblemSize: '; print: each problemSize." + suite := + FLSMarkSuite new + runOnly: #benchSerialization; + sample: each; + runner: runner; + yourself. + + runner suite: suite; execute ]. + + runner reportConfiguration: ScriptConsole; report. + ScriptConsole cr; flush ] \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/sampleNamed..st b/repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/sampleNamed..st index caadb499..f191f719 100644 --- a/repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/sampleNamed..st +++ b/repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/sampleNamed..st @@ -1,4 +1,6 @@ sample creation sampleNamed: aSelector - ^ (self new selector: aSelector) asSample \ No newline at end of file + ^ (self new + selector: aSelector; + yourself) asSample \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/sampleNamed.problemSize..st b/repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/sampleNamed.problemSize..st new file mode 100644 index 00000000..5c3d350c --- /dev/null +++ b/repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/sampleNamed.problemSize..st @@ -0,0 +1,7 @@ +sample creation +sampleNamed: aSelector problemSize: n + + ^ (self new + selector: aSelector; + problemSize: n; + yourself) asSample \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/samplesNamed..st b/repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/samplesNamed..st index 5bcc43d8..95fd113a 100644 --- a/repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/samplesNamed..st +++ b/repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/samplesNamed..st @@ -1,7 +1,5 @@ sample creation samplesNamed: aCollectionOfSampleSelectors - "Answer a collection of instances of me, with the selectors. Each selector should define a class-side method." - ^aCollectionOfSampleSelectors - collect: [ :aSelector | - (self withAllSubclasses detect: [:each | each includesSelector: aSelector ]) - sampleNamed: aSelector ] \ No newline at end of file + "Answer a collection of instances of me, with the selectors. Each selector should define a class-side method." + + ^ self samplesNamed: aCollectionOfSampleSelectors problemSize: self defaultProblemSize \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/samplesNamed.problemSize..st b/repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/samplesNamed.problemSize..st new file mode 100644 index 00000000..bf67ed79 --- /dev/null +++ b/repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/samplesNamed.problemSize..st @@ -0,0 +1,6 @@ +sample creation +samplesNamed: aCollectionOfSampleSelectors problemSize: n + "Answer a collection of instances of me, with the selectors. Each selector should define a class-side method." + + ^ aCollectionOfSampleSelectors collect: [ :aSelector | + self sampleNamed: aSelector problemSize: n ] \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/samplesProblemSize..st b/repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/samplesProblemSize..st new file mode 100644 index 00000000..9f0c1461 --- /dev/null +++ b/repository/Fuel-Benchmarks.package/FLSampleFactory.class/class/samplesProblemSize..st @@ -0,0 +1,4 @@ +sample creation +samplesProblemSize: n + + ^ self samplesNamed: self sampleSelectors problemSize: n \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/FLSampleFactory.class/instance/asSample.st b/repository/Fuel-Benchmarks.package/FLSampleFactory.class/instance/asSample.st index 604f3703..7efa4e94 100644 --- a/repository/Fuel-Benchmarks.package/FLSampleFactory.class/instance/asSample.st +++ b/repository/Fuel-Benchmarks.package/FLSampleFactory.class/instance/asSample.st @@ -1,6 +1,8 @@ building asSample - ^ FLBenchmarkSample - title: selector asString - content: (self perform: selector) \ No newline at end of file + ^ FLBenchmarkSample new + title: selector asString; + problemSize: problemSize; + content: (self perform: selector); + yourself \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/FLSampleFactory.class/instance/fewSystemClasses.st b/repository/Fuel-Benchmarks.package/FLSampleFactory.class/instance/fewSystemClasses.st index eba91d31..9c56baa1 100644 --- a/repository/Fuel-Benchmarks.package/FLSampleFactory.class/instance/fewSystemClasses.st +++ b/repository/Fuel-Benchmarks.package/FLSampleFactory.class/instance/fewSystemClasses.st @@ -1,6 +1,8 @@ private fewSystemClasses - ^ Array streamContents: [ :stream | - #('System' 'Collections' 'SUnit') do: [ :packageName | - (SystemOrganization categoriesMatching: packageName, '*') do: [ :category | - stream nextPutAll: (SystemOrganization classesInCategory: category) ] ] ] \ No newline at end of file + + ^ (PackageOrganizer default packages + select: [ :each | + #( 'System' 'Collections' 'SUnit' ) + anySatisfy: [ :prefix | each name beginsWith: prefix ] ]) + flatCollect: [ :each | each classes ] as: Array \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/FLSampleFactory.class/instance/problemSize..st b/repository/Fuel-Benchmarks.package/FLSampleFactory.class/instance/problemSize..st index d7f1bb9e..49d8bc56 100644 --- a/repository/Fuel-Benchmarks.package/FLSampleFactory.class/instance/problemSize..st +++ b/repository/Fuel-Benchmarks.package/FLSampleFactory.class/instance/problemSize..st @@ -1,3 +1,3 @@ accessing -problemSize: anObject - problemSize := anObject \ No newline at end of file +problemSize: anInteger + problemSize := anInteger \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/FLSampleFactory.class/instance/selector..st b/repository/Fuel-Benchmarks.package/FLSampleFactory.class/instance/selector..st index 0d57f4e4..f3222a02 100644 --- a/repository/Fuel-Benchmarks.package/FLSampleFactory.class/instance/selector..st +++ b/repository/Fuel-Benchmarks.package/FLSampleFactory.class/instance/selector..st @@ -1,3 +1,3 @@ accessing -selector: anObject - selector := anObject \ No newline at end of file +selector: aSymbol + selector := aSymbol \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/FLStructureSampleFactory.class/instance/completeGraph.st b/repository/Fuel-Benchmarks.package/FLStructureSampleFactory.class/instance/completeGraph.st index e420e9e5..12686d49 100644 --- a/repository/Fuel-Benchmarks.package/FLStructureSampleFactory.class/instance/completeGraph.st +++ b/repository/Fuel-Benchmarks.package/FLStructureSampleFactory.class/instance/completeGraph.st @@ -1,6 +1,6 @@ samples completeGraph - "Answe ra complete graph of aproximately problemSize edges. A complete graph of n vertices has n*(n-1)/2 edges." + "Answer a complete graph of aproximately problemSize edges. A complete graph of n vertices has n*(n-1)/2 edges." | n vertices | n := (self problemSize * 2) sqrt rounded. diff --git a/repository/Fuel-Benchmarks.package/FLSystemSampleFactory.class/instance/globals.st b/repository/Fuel-Benchmarks.package/FLSystemSampleFactory.class/instance/globals.st index f4965300..0acd20f0 100644 --- a/repository/Fuel-Benchmarks.package/FLSystemSampleFactory.class/instance/globals.st +++ b/repository/Fuel-Benchmarks.package/FLSystemSampleFactory.class/instance/globals.st @@ -1,9 +1,11 @@ samples globals - | globals | - globals := FLConfiguration defaultGlobalSymbols collect: [ :s | - self class environment at: s ]. + | globals | + globals := Array streamContents: [ :stream | + FLConfiguration defaultGlobalSymbols do: [ :each | + self class environment + at: each + ifPresent: [ :value | stream nextPut: value ] ] ]. - ^ (1 to: self problemSize) collect: [ :i | - globals atWrap: i ]. \ No newline at end of file + ^ (1 to: self problemSize) collect: [ :i | globals atWrap: i ] \ No newline at end of file diff --git a/repository/Fuel-Benchmarks.package/monticello.meta/categories.st b/repository/Fuel-Benchmarks.package/monticello.meta/categories.st index e1f7b2fd..5ffb7d20 100644 --- a/repository/Fuel-Benchmarks.package/monticello.meta/categories.st +++ b/repository/Fuel-Benchmarks.package/monticello.meta/categories.st @@ -1,4 +1 @@ -SystemOrganization addCategory: #'Fuel-Benchmarks'! -SystemOrganization addCategory: #'Fuel-Benchmarks-Core'! -SystemOrganization addCategory: #'Fuel-Benchmarks-Other'! -SystemOrganization addCategory: #'Fuel-Benchmarks-Samples'! +self packageOrganizer ensurePackage: #'Fuel-Benchmarks' withTags: #(#Core #Other #Samples)!