Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
CS-206 Demos
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
LARA
CS-206 Demos
Compare revisions
84f6a2983163a3f74183b59c572c3e09d0f32aa6 to main
Compare revisions
Changes are shown as if the
source
revision was being merged into the
target
revision.
Learn more about comparing revisions.
Source
lara/cs206-demos
Select target project
No results found
main
Select Git revision
Branches
main
mb/alt-orderdec
mb/student-159
Swap
Target
gambhir/cs206-demos
Select target project
lara/cs206-demos
gcharles/cs206-demos
gambhir/cs206-demos
3 results
84f6a2983163a3f74183b59c572c3e09d0f32aa6
Select Git revision
Branches
main
mb
Show changes
Only incoming changes from source
Include changes to target since source was created
Compare
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/test/scala/midterm23/ScheduledBarberShopSolution.scala
+65
-0
65 additions, 0 deletions
src/test/scala/midterm23/ScheduledBarberShopSolution.scala
src/test/scala/midterm23/testBarberShop.scala
+39
-0
39 additions, 0 deletions
src/test/scala/midterm23/testBarberShop.scala
with
104 additions
and
0 deletions
src/test/scala/midterm23/ScheduledBarberShopSolution.scala
0 → 100644
View file @
0f473913
package
midterm23
import
instrumentation.
{
MockedMonitor
,
Monitor
,
Scheduler
}
import
java.util.concurrent.ConcurrentLinkedQueue
import
scala.jdk.CollectionConverters.IterableHasAsScala
import
scala.annotation.tailrec
trait
ScheduledBarberShopSolution
(
scheduler0
:
Scheduler
)
extends
AbstractBarberShopSolution
:
enum
Event:
case
HairCut
case
CustomerLeaves
val
trace
=
ConcurrentLinkedQueue
[
Event
]()
override
def
notifyBarber
=
scheduler0
.
exec
{
super
.
notifyBarber
}(
""
,
Some
(
res
=>
f
"read notifyBarber == $res"
)
)
override
def
notifyBarber_=
(
v
:
Boolean
)
=
scheduler0
.
exec
{
super
.
notifyBarber
=
v
}(
f
"write notifyBarber = $v"
)
override
def
notifyCustomer
=
scheduler0
.
exec
{
super
.
notifyCustomer
}(
""
,
Some
(
res
=>
f
"read notifyCustomer == $res"
)
)
override
def
notifyCustomer_=
(
v
:
Boolean
)
=
scheduler0
.
exec
{
super
.
notifyCustomer
=
v
}(
f
"write notifyCustomer = $v"
)
override
def
hairCut
()
=
log
(
"hair cut"
)
trace
.
add
(
Event
.
HairCut
)
def
customerTrace
(
n
:
Int
)
:
Unit
=
this
.
customer
(
n
)
log
(
"customer leaves"
)
trace
.
add
(
Event
.
CustomerLeaves
)
private
val
_lockObj
=
new
MockedMonitor
:
override
def
scheduler:
Scheduler
=
scheduler0
override
def
lockObj
:
Monitor
=
_lockObj
override
def
log
(
s
:
String
)
:
Unit
=
scheduler0
.
log
(
s
)
def
nHaircuts
:
Int
=
trace
.
asScala
.
filter
(
_
==
Event
.
HairCut
).
size
def
customerLeftEarly
()
:
Boolean
=
@tailrec
def
loop
(
it
:
Iterable
[
Event
],
n
:
Int
)
:
Boolean
=
if
it
.
isEmpty
then
false
else
val
newN
=
it
.
head
match
case
Event
.
HairCut
=>
n
+
1
case
Event
.
CustomerLeaves
=>
n
-
1
if
newN
<
0
then
true
else
loop
(
it
.
tail
,
newN
)
loop
(
trace
.
asScala
,
0
)
This diff is collapsed.
Click to expand it.
src/test/scala/midterm23/testBarberShop.scala
0 → 100644
View file @
0f473913
package
midterm23
import
instrumentation.
{
Scheduler
,
TestHelper
}
/** Tests a barber shop implementation.
*
* @param nCustomers
* The number of customers to simulate.
* @param makeShop
* A function that creates a barber shop given the number of customers and a
* scheduler.
* @param checkEarlyCustomer
* If true, checks that no customer left early, i.e. that there is always a
* number of terminated customer threads equal or less than to the number of
* haircuts done.
*/
def
testBarberShop
(
nCustomers
:
Int
,
makeShop
:
(
Int
,
Scheduler
)
=>
ScheduledBarberShopSolution
,
checkEarlyCustomer
:
Boolean
=
true
)
=
TestHelper
.
testManySchedules
(
nCustomers
+
1
,
scheduler
=>
val
barberShop
=
makeShop
(
nCustomers
,
scheduler
)
(
(()
=>
barberShop
.
barber
())
::
(
for
i
<-
1
to
nCustomers
yield
()
=>
barberShop
.
customerTrace
(
i
)).
toList
,
results
=>
if
barberShop
.
nHaircuts
!=
nCustomers
then
(
false
,
f
"Unexpected number of hair cuts: ${barberShop.nHaircuts}"
)
else
if
checkEarlyCustomer
&&
barberShop
.
customerLeftEarly
()
then
(
false
,
f
"A customer left early"
)
else
(
true
,
""
)
)
)
This diff is collapsed.
Click to expand it.
Prev
1
…
4
5
6
7
8
Next