Causality test case 1
# Initially, x = y = 0
# Thread 1
1: r1 = x
2: if r1 >= 0
3: y = 1
# Thread 2
4: r2 = y
5: x = r2
# Behavior in question:
r1 == r2 == 1
- Axiomatic
- DISALLOWED
- if 1 --
dob
--> 3 --rfe
--> 4, 4--dob
--> 5 --rfe
--> 1
- Promising
- DISALLOWED
- 1이 먼저 실행되면
r1
이 0
- 4가 먼저 실행되면
r2
가 0
Causality test case 2
# Initially, x = y = 0
# Thread 1:
1: r1 = x
2: r2 = x
3: if r1 == r2
4: y = 1
# Thread 2:
5: r3 = y
6: x = r3
# Behavior in question:
r1 == r2 == r3 == 1
- Axiomatic
- DISALLOWED
- if 1 --
dob
--> 2 --dob
--> 4 --rfe
--> 5, 5--dob
--> 6 --rfe
--> 1
- Promising
- DISALLOWED
- 1이 먼저 실행되면
r1
이 0
- 5가 먼저 실행되면
r3
가 0
Causality test case 3
# Initially, x = y = 0
# Thread 1:
1: r1 = x
2: r2 = x
3: if r1 == r2
4: y = 1
# Thread 2:
5: r3 = y
6: x = r3
# Thread 3:
7: x = 2
# Behavior in question:
r1 == r2 == r3 == 1
- Axiomatic
- DISALLOWED
- if 1 --
dob
--> 2 --dob
--> 4 --rfe
--> 5, 5--dob
--> 6 --rfe
--> 1
- Promising
- DISALLOWED
- 1이 먼저 실행되면
r1
이 0
- 5가 먼저 실행되면
r3
가 0
Causality test case 4
# Initially, x = y = 0
# Thread 1:
1: r1 = x
2: y = r1
# Thread 2:
3: r2 = y
4: x = r2
# Behavior in question:
r1 == r2 == 1
- Axiomatic
- DISALLOWED
- if 1 --
dob
--> 2 --rfe
--> 3, 3--dob
--> 4 --rfe
--> 1
- Promising
- DISALLOWED
- 1이 먼저 실행되면
r1
이 0
- 3이 먼저 실행되면
r2
가 0
Causality test case 5
# Initially, x = y = z = 0
# Thread 1:
1: r1 = x
2: y = r1
# Thread 2
3: r2 = y
4: x = r2
# Thread 3
5: z = 1
# Thread 4
6: r3 = z
7: x = r3
# Behavior in question:
r1 == r2 == 1, r3 == 0.
- Axiomatic
- DISALLOWED
- if 5 --
rfe
--> 6, r3 == 0
- else if 1 --
dob
--> 2 --rfe
--> 3, 3--dob
--> 4 --rfe
--> 1
- Promising
- DISALLOWED
- 1이 먼저 실행되면
r1
이 0
- 3이 먼저 실행되면
r2
가 0
- 5가 먼저 실행되면
r3
가 1
- 6이 먼저 실행되면 7 실행 여부와 관계 없이 1에서
r1
이 0
Causality test case 6
# Initially A = B = 0
# Thread 1
1: r1 = A
2: if (r1 == 1)
3: B = 1
# Thread 2
4: r2 = B
5: if (r2 == 1)
6: A = 1
7: if (r2 == 0)
8: A = 1
# Behavior in question:
r1 == r2 == 1
- Axiomatic
- DISALLOWED
- if 1 --
dob
--> 3 --rfe
--> 4, 4--dob
--> 6 --rfe
--> 1
- if 4 --
dob
--> 8 --rfe
--> 1, 1--dob
--> 3 --rfe
--> 4
- Promising
- DISALLOWED
- 1이 먼저 실행되면
r1
은 0
- 4가 먼저 실행되면
r2
는 0
Causality test case 7
# Initially, x = y = z = 0
# Thread 1:
1: r1 = z
2: r2 = x
3: y = r2
# Thread 2:
4: r3 = y
5: z = r3
6: x = 1
# Behavior in question:
r1 == r2 == r3 == 1.
- Axiomatic
- DISALLOWED
- if 4 --
dob
--> 5 --dob
--> 6--rfe
--> 2, 2 --dob
--> 3 --rfe
--> 4
- Promising
- DISALLOWED
- 1이 먼저 실행되면
r1
은 0
- 4가 먼저 실행되면
r3
는 0
Causality test case 8
# Initially, x = y = 0
# Thread 1:
1: r1 = x
2: r2 = 1 + r1*r1 - r1
3: y = r2
# Thread 2:
4: r3 = y
5: x = r3
# Behavior in question:
r1 == r2 == 1
- Axiomatic
- DISALLOWED
- if 1 --
dob
--> 2 --dob
--> 3 --rfe
--> 4, 4 --dob
--> 5 --rfe
--> 1
- Promising
- DISALLOWED
- 1이 먼저 실행되면
r1
은 0
- 4가 먼저 실행되면
r3
는 0
=> r1
은 0
Causality test case 9
# Initially, x = y = 0
# Thread 1:
1: r1 = x
2: r2 = 1 + r1*r1 - r1
3: y = r2
# Thread 2:
4: r3 = y
5: x = r3
# Thread 3:
6: x = 2
# Behavior in question:
r1 == r2 == 1
- Axiomatic
- DISALLOWED
- if 1 --
dob
--> 2 --dob
--> 3 --rfe
--> 4, 4 --dob
--> 5 --rfe
--> 1
- Promising
- DISALLOWED
- 1이 먼저 실행되면
r1
은 0
- 4가 먼저 실행되면
r3
는 0
- 그 뒤 1이면
r1
은 0
- 그 뒤 6 뒤에 1이면
r1
은 2
Causality test case 10
# Initially, x = y = z = 0
# Thread 1:
1: r1 = x
2: if (r1 == 1)
3: y = 1
# Thread 2
4: r2 = y
5: if (r2 == 1)
6: x = 1
# Thread 3
7: z = 1
# Thread 4
8: r3 = z
9: if (r3 == 1)
10: x = 1
# Behavior in question:
r1 == r2 == 1, r3 == 0.
- Axiomatic
- Promising
- DISALLOWED
- 1이 먼저 실행되면
r1
은 0
- 4가 먼저 실행되면
r2
는 0
- 7이 먼저 실행되면 8에서
r3
는 1
- 8이 먼저 실행되면,
- 1이 먼저 실행되면
r1
은 0
- 4가 먼저 실행되면
r2
는 0
Causality test case 11
# Initially, x = y = z = 0
# Thread 1:
1: r1 = z
2: w = r1
3: r2 = x
4: y = r2
# Thread 2:
5: r4 = w
6: r3 = y
7: z = r3
8: x = 1
# Behavior in question:
r1 == r2 == r3 == r4 == 1
- Axiomatic
- DISALLOWED
- if 8 --
rfe
-->3, 3 --dob
--> 4 --rfe
--> 6 --dob
-->8
- Promising
- DISALLOWED
- 1이 먼저 실행되면
r1
은 0
- 비록
w
가 initially 1
일지라도 5가 먼저 실행되면,
- 1이 먼저 실행되면
r1
은 0
- 6이 먼저 실행되면
r3
는 0
Causality test case 12
# Initially, x = y = 0; a[0] = 1, a[1] = 2
# Thread 1
1: r1 = x
2: a[r1] = 0
3: r2 = a[0]
4: y = r2
# Thread 2
5: r3 = y
6: x = r3
# Behavior in question:
r1 == r2 == r3 == 1
- Axiomatic
- DISALLOWED
- if 3 --
dob
--> 4 --rfe
--> 5, 5 --dob
--> 6 --rfe
--> 1 --dob
--> 3
- Promising
- DISALLOWED
- 1이 먼저 실행되면
r1
은 0
- 5가 먼저 실행되면
r3
는 0
Causality test case 13
# Initially, x = y = 0
# Thread 1:
1: r1 = x
2: if (r1 == 1)
3: y = 1
# Thread 2:
4: r2 = y
5: if (r2 == 1)
6: x = 1
# Behavior in question:
r1 == r2 == 1
- Axiomatic
- DISALLOWED
- if 3 --
rfe
--> 4, 4 --dob
--> 6 --rfe
--> 1 --dob
--> 3
- Promising
- DISALLOWED
- 1이 먼저 실행되면
r1
은 0
- 4가 먼저 실행되면
r2
는 0
Causality test case 14
# Initially, a = b = y = 0, y is volatile
# Thread 1:
1: r1 = a
2: if (r1 == 0)
3: y = 1
4: else
5: b = 1
# Thread 2:
6: do {
7: r2 = y
8: r3 = b
9: } while (r2 + r3 == 0);
10: a = 1;
# Behavior in question:
r1 == r3 == 1; r2 == 0
- Axiomatic
- DISALLOWED
- if 10 --
rfe
--> 1, 1 --dob
--> 5 --rfe
--> 8 --dob
--> 10
- Promising
- DISALLOWED
- 1이 먼저 실행되면
r1
은 0
- 1이 실행되기 전에 7, 8은 무한 루프
Causality test case 15
# Initially, a = b = x = y = 0, x and y are volatile
# Thread 1:
1: r0 = x
2: if (r0 == 1)
3: r1 = a
4: else
5: r1 = 0
6: if (r1 == 0)
7: y = 1
8: else
9: b = 1
# Thread 2:
10: do {
11: r2 = y
12: r3 = b
13: } while (r2 + r3 == 0);
14: a = 1;
# Thread 3:
15: x = 1
# Behavior in question:
r0 == r1 == r3 = 1; r2 == 0
- Axiomatic
- DISALLOWED
- if 15 --
rfe
--> 1 --dob
--> 3 --dob
--> 9 --rfe
--> 12, 12 --dob
--> 14 --rfe
--> 3
- Promising
- DISALLOWED
- 1이 먼저 실행되면
r0
은 0
- 15이 먼저 실행되면
- 1이 먼저 실행되면 3에서
r1
은 0
- 11, 12는 7, 9가 실행되기 전까지 무한 루프
Causality test case 16
# Initially, x = 0
# Thread 1:
1: r1 = x
2: x = 1
# Thread 2:
3: r2 = x
4: x = 2
# Behavior in question:
r1 == 2; r2 == 1
- Axiomatic
- DISALLOWED
- if 2 --
rfe
--> 3 , 3 --dob
--> 4 --rfe
--> 1 --dob
--> 2
- Promising
- DISALLOWED
- 1이 먼저 실행되면
r1
은 0
- 3이 먼저 실행되면
r2
는 0
Causality test case 17
# Initially, x = y = 0
# Thread 1:
1: r3 = x
2: if (r3 != 42)
3: x = 42
4: r1 = x
5: y = r1
# Thread 2:
6: r2 = y
7: x = r2
# Behavior in question:
r1 == r2 == r3 == 42
- Axiomatic
- DISALLOWED???
- if 1 --
dob
--> 3, 1 --dob
--> 4 --fr
--> 7 --rfe
--> 1
- Promising
- DISALLOWED
- 1이 먼저 실행되면
r3
는 0
- 6이 먼저 실행되면
r2
는 0
Causality test case 18
# Initially, x = y = 0
# Thread 1:
1: r3 = x
2: if (r3 == 0)
3: x = 42
4: r1 = x
5: y = r1
# Thread 2:
6: r2 = y
7: x = r2
# Behavior in question:
r1 == r2 == r3 == 42
- Axiomatic
- DISALLOWED???
- if 1 --
dob
--> 3, 1 --dob
--> 4 --fr
--> 7 --rfe
--> 1
- Promising
- DISALLOWED
- 1이 먼저 실행되면
r3
는 0
- 6이 먼저 실행되면
r2
는 0
Causality test case 19
# Initially, x = y = 0
# Thread 1:
1: join thread 3
2: r1 = x
3: y = r1
# Thread 2:
4: r2 = y
5: x = r2
# Thread 3:
6: r3 = x
7: if (r3 != 42)
8: x = 42
# Behavior in question:
r1 == r2 == r3 == 42
- Axiomatic
- DISALLOWED
- if 6 --
dob
--> 8, 8 --rfe
--> 2 --dob
--> 3 --rfe
--> 4 --dob
--> 5 --rfe
--> 6
- Promising
- DISALLOWED
- 4가 먼저 실행되면
r2
는 0
- 6이 먼저 실행되면
r3
는 0
Causality test case 20
# Initially, x = y = 0
# Thread 1:
1: join thread 3
2: r1 = x
3: y = r1
# Thread 2:
4: r2 = y
5: x = r2
# Thread 3:
6: r3 = x
7: if (r3 == 0)
8: x = 42
# Behavior in question:
r1 == r2 == r3 == 42
- Axiomatic
- DISALLOWED
- if 6 --
dob
--> 8, 8 --rfe
--> 2 --dob
--> 3 --rfe
--> 4 --dob
--> 5 --rfe
--> 6
- Promising
- DISALLOWED
- 4가 먼저 실행되면
r2
는 0
- 6이 먼저 실행되면
r3
는 0