-
Notifications
You must be signed in to change notification settings - Fork 43
Constant-time Reference Counting in Effekt #1299
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 20 commits
b7ffded
ebb8b9c
ca83943
0dd2a6c
fe49498
563f3c6
f21ddfd
b2bc845
bad6968
c2689fa
82da493
c699d9c
4402387
ea2fcf4
3801f88
2e8cfcc
e8601f8
bc05601
b9d68ad
a1985c8
d0cc38e
baa4542
90fefea
42d07eb
3b5609f
fd54b3c
26e8252
5669780
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| package effekt | ||
|
|
||
| import sbt.io.* | ||
| import sbt.io.syntax.* | ||
|
|
||
| import java.io.File | ||
| import scala.language.implicitConversions | ||
| import scala.sys.process.Process | ||
|
|
||
| class CTRCTests extends EffektTests { | ||
|
|
||
| def backendName = "llvm" | ||
|
|
||
| override def valgrind = false // works on linux only | ||
|
|
||
| override lazy val positives: Set[File] = Set( | ||
| examplesDir / "ctrc" / "optimized" | ||
| ) | ||
|
|
||
| override lazy val withoutOptimizations: Set[File] = Set( | ||
| examplesDir / "ctrc" / "nooptimized", | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why are the tests in a folder nooptimized? I can't find the "optimized" folder. I personally would not add any tests at all. Others surely disagree.
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, there is no optimized folder because during the thesis, it was helpful to work with the pure program rather than the optimized one. These tests were done to "debug" better through Effekt. It would be cool if we could test stronger by asserting the number of used chunks or other invariants. Then these tests would have more value |
||
| ) | ||
| } | ||
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,65 @@ | ||
| 1 | ||
| 2 | ||
| 3 | ||
| 4 | ||
| 5 | ||
| 6 | ||
| 7 | ||
| 8 | ||
| 9 | ||
| 10 | ||
| 11 | ||
| 12 | ||
| 13 | ||
| 14 | ||
| 15 | ||
| 16 | ||
| 17 | ||
| 18 | ||
| 19 | ||
| 20 | ||
| 21 | ||
| 22 | ||
| 23 | ||
| 24 | ||
| 25 | ||
| 26 | ||
| 27 | ||
| 28 | ||
| 29 | ||
| 30 | ||
| 31 | ||
| 32 | ||
| 33 | ||
| 34 | ||
| 35 | ||
| 36 | ||
| 37 | ||
| 38 | ||
| 39 | ||
| 40 | ||
| 41 | ||
| 42 | ||
| 43 | ||
| 44 | ||
| 45 | ||
| 46 | ||
| 47 | ||
| 48 | ||
| 49 | ||
| 50 | ||
| 51 | ||
| 52 | ||
| 53 | ||
| 54 | ||
| 55 | ||
| 56 | ||
| 57 | ||
| 58 | ||
| 59 | ||
| 60 | ||
| 61 | ||
| 62 | ||
| 63 | ||
| 64 | ||
| 65 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,148 @@ | ||
|
|
||
| record OneSlotPerson( | ||
| field1: Int, | ||
| field2: Int, | ||
| field3: Int, | ||
| field4: Int, | ||
| field5: Int, | ||
| field6: Int | ||
| ) | ||
|
|
||
| def allocate65SlotsAndReleaseThem() = { | ||
| var x1 = OneSlotPerson(1, 2, 3, 4, 5, 6) | ||
| var x2 = OneSlotPerson(2, 3, 4, 5, 6, 7) | ||
| var x3 = OneSlotPerson(3, 4, 5, 6, 7, 8) | ||
| var x4 = OneSlotPerson(4, 5, 6, 7, 8, 9) | ||
| var x5 = OneSlotPerson(5, 6, 7, 8, 9, 10) | ||
| var x6 = OneSlotPerson(6, 7, 8, 9, 10, 11) | ||
| var x7 = OneSlotPerson(7, 8, 9, 10, 11, 12) | ||
| var x8 = OneSlotPerson(8, 9, 10, 11, 12, 13) | ||
| var x9 = OneSlotPerson(9, 10, 11, 12, 13, 14) | ||
| var x10 = OneSlotPerson(10, 11, 12, 13, 14, 15) | ||
| var x11 = OneSlotPerson(11, 12, 13, 14, 15, 16) | ||
| var x12 = OneSlotPerson(12, 13, 14, 15, 16, 17) | ||
| var x13 = OneSlotPerson(13, 14, 15, 16, 17, 18) | ||
| var x14 = OneSlotPerson(14, 15, 16, 17, 18, 19) | ||
| var x15 = OneSlotPerson(15, 16, 17, 18, 19, 20) | ||
| var x16 = OneSlotPerson(16, 17, 18, 19, 20, 21) | ||
| var x17 = OneSlotPerson(17, 18, 19, 20, 21, 22) | ||
| var x18 = OneSlotPerson(18, 19, 20, 21, 22, 23) | ||
| var x19 = OneSlotPerson(19, 20, 21, 22, 23, 24) | ||
| var x20 = OneSlotPerson(20, 21, 22, 23, 24, 25) | ||
| var x21 = OneSlotPerson(21, 22, 23, 24, 25, 26) | ||
| var x22 = OneSlotPerson(22, 23, 24, 25, 26, 27) | ||
| var x23 = OneSlotPerson(23, 24, 25, 26, 27, 28) | ||
| var x24 = OneSlotPerson(24, 25, 26, 27, 28, 29) | ||
| var x25 = OneSlotPerson(25, 26, 27, 28, 29, 30) | ||
| var x26 = OneSlotPerson(26, 27, 28, 29, 30, 31) | ||
| var x27 = OneSlotPerson(27, 28, 29, 30, 31, 32) | ||
| var x28 = OneSlotPerson(28, 29, 30, 31, 32, 33) | ||
| var x29 = OneSlotPerson(29, 30, 31, 32, 33, 34) | ||
| var x30 = OneSlotPerson(30, 31, 32, 33, 34, 35) | ||
| var x31 = OneSlotPerson(31, 32, 33, 34, 35, 36) | ||
| var x32 = OneSlotPerson(32, 33, 34, 35, 36, 37) | ||
| var x33 = OneSlotPerson(33, 34, 35, 36, 37, 38) | ||
| var x34 = OneSlotPerson(34, 35, 36, 37, 38, 39) | ||
| var x35 = OneSlotPerson(35, 36, 37, 38, 39, 40) | ||
| var x36 = OneSlotPerson(36, 37, 38, 39, 40, 41) | ||
| var x37 = OneSlotPerson(37, 38, 39, 40, 41, 42) | ||
| var x38 = OneSlotPerson(38, 39, 40, 41, 42, 43) | ||
| var x39 = OneSlotPerson(39, 40, 41, 42, 43, 44) | ||
| var x40 = OneSlotPerson(40, 41, 42, 43, 44, 45) | ||
| var x41 = OneSlotPerson(41, 42, 43, 44, 45, 46) | ||
| var x42 = OneSlotPerson(42, 43, 44, 45, 46, 47) | ||
| var x43 = OneSlotPerson(43, 44, 45, 46, 47, 48) | ||
| var x44 = OneSlotPerson(44, 45, 46, 47, 48, 49) | ||
| var x45 = OneSlotPerson(45, 46, 47, 48, 49, 50) | ||
| var x46 = OneSlotPerson(46, 47, 48, 49, 50, 51) | ||
| var x47 = OneSlotPerson(47, 48, 49, 50, 51, 52) | ||
| var x48 = OneSlotPerson(48, 49, 50, 51, 52, 53) | ||
| var x49 = OneSlotPerson(49, 50, 51, 52, 53, 54) | ||
| var x50 = OneSlotPerson(50, 51, 52, 53, 54, 55) | ||
| var x51 = OneSlotPerson(51, 52, 53, 54, 55, 56) | ||
| var x52 = OneSlotPerson(52, 53, 54, 55, 56, 57) | ||
| var x53 = OneSlotPerson(53, 54, 55, 56, 57, 58) | ||
| var x54 = OneSlotPerson(54, 55, 56, 57, 58, 59) | ||
| var x55 = OneSlotPerson(55, 56, 57, 58, 59, 60) | ||
| var x56 = OneSlotPerson(56, 57, 58, 59, 60, 61) | ||
| var x57 = OneSlotPerson(57, 58, 59, 60, 61, 62) | ||
| var x58 = OneSlotPerson(58, 59, 60, 61, 62, 63) | ||
| var x59 = OneSlotPerson(59, 60, 61, 62, 63, 64) | ||
| var x60 = OneSlotPerson(60, 61, 62, 63, 64, 65) | ||
| var x61 = OneSlotPerson(61, 62, 63, 64, 65, 66) | ||
| var x62 = OneSlotPerson(62, 63, 64, 65, 66, 67) | ||
| var x63 = OneSlotPerson(63, 64, 65, 66, 67, 68) | ||
| var x64 = OneSlotPerson(64, 65, 66, 67, 68, 69) | ||
| var x65 = OneSlotPerson(65, 66, 67, 68, 69, 70) | ||
|
|
||
| println(x1.field1) | ||
| println(x2.field1) | ||
| println(x3.field1) | ||
| println(x4.field1) | ||
| println(x5.field1) | ||
| println(x6.field1) | ||
| println(x7.field1) | ||
| println(x8.field1) | ||
| println(x9.field1) | ||
| println(x10.field1) | ||
| println(x11.field1) | ||
| println(x12.field1) | ||
| println(x13.field1) | ||
| println(x14.field1) | ||
| println(x15.field1) | ||
| println(x16.field1) | ||
| println(x17.field1) | ||
| println(x18.field1) | ||
| println(x19.field1) | ||
| println(x20.field1) | ||
| println(x21.field1) | ||
| println(x22.field1) | ||
| println(x23.field1) | ||
| println(x24.field1) | ||
| println(x25.field1) | ||
| println(x26.field1) | ||
| println(x27.field1) | ||
| println(x28.field1) | ||
| println(x29.field1) | ||
| println(x30.field1) | ||
| println(x31.field1) | ||
| println(x32.field1) | ||
| println(x33.field1) | ||
| println(x34.field1) | ||
| println(x35.field1) | ||
| println(x36.field1) | ||
| println(x37.field1) | ||
| println(x38.field1) | ||
| println(x39.field1) | ||
| println(x40.field1) | ||
| println(x41.field1) | ||
| println(x42.field1) | ||
| println(x43.field1) | ||
| println(x44.field1) | ||
| println(x45.field1) | ||
| println(x46.field1) | ||
| println(x47.field1) | ||
| println(x48.field1) | ||
| println(x49.field1) | ||
| println(x50.field1) | ||
| println(x51.field1) | ||
| println(x52.field1) | ||
| println(x53.field1) | ||
| println(x54.field1) | ||
| println(x55.field1) | ||
| println(x56.field1) | ||
| println(x57.field1) | ||
| println(x58.field1) | ||
| println(x59.field1) | ||
| println(x60.field1) | ||
| println(x61.field1) | ||
| println(x62.field1) | ||
| println(x63.field1) | ||
| println(x64.field1) | ||
| println(x65.field1) | ||
| } | ||
|
|
||
| def main() = { | ||
| allocate65SlotsAndReleaseThem(); | ||
| var finalObjectThatTriggersFlushingTodoList = OneSlotPerson(1, 2, 3, 4, 5, 6) | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Someone with a Mac should test and approve this
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fwiw, this works on my machine (though I use nix-darwin, so I'm not the best guinea pig)