Compare commits
1 Commits
master
...
advance-to
| Author | SHA1 | Date | |
|---|---|---|---|
|
cf351be434
|
BIN
examples/images/Screenshot_20251125_010053.jpeg
Normal file
BIN
examples/images/Screenshot_20251125_010053.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 28 KiB |
BIN
examples/images/Screenshot_20251125_011029.jpeg
Normal file
BIN
examples/images/Screenshot_20251125_011029.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 111 KiB |
BIN
examples/images/Screenshot_20251125_011348.jpeg
Normal file
BIN
examples/images/Screenshot_20251125_011348.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 92 KiB |
BIN
examples/images/Screenshot_20251125_014355.jpeg
Normal file
BIN
examples/images/Screenshot_20251125_014355.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 79 KiB |
BIN
examples/images/Screenshot_20251125_015416.jpeg
Normal file
BIN
examples/images/Screenshot_20251125_015416.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 36 KiB |
BIN
examples/images/Screenshot_20251125_015705.jpeg
Normal file
BIN
examples/images/Screenshot_20251125_015705.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
@@ -7,7 +7,7 @@
|
||||
<title>reveal.js - Markdown Example</title>
|
||||
|
||||
<link rel="stylesheet" href="../dist/reveal.css">
|
||||
<link rel="stylesheet" href="../dist/theme/white.css" id="theme">
|
||||
<link rel="stylesheet" href="../dist/theme/black.css" id="theme">
|
||||
|
||||
<link rel="stylesheet" href="../plugin/highlight/monokai.css">
|
||||
</head>
|
||||
@@ -21,120 +21,6 @@
|
||||
<!-- Use external markdown resource, separate slides by three newlines; vertical slides by two newlines -->
|
||||
<section data-markdown="markdown.md" data-separator="^\n\n\n" data-separator-vertical="^\n\n"></section>
|
||||
|
||||
<!-- Slides are separated by three dashes (the default) -->
|
||||
<section data-markdown>
|
||||
<script type="text/template">
|
||||
## Demo 1
|
||||
Slide 1
|
||||
---
|
||||
## Demo 1
|
||||
Slide 2
|
||||
---
|
||||
## Demo 1
|
||||
Slide 3
|
||||
</script>
|
||||
</section>
|
||||
|
||||
<!-- Slides are separated by regexp matching newline + three dashes + newline, vertical slides identical but two dashes -->
|
||||
<section data-markdown data-separator="^\n---\n$" data-separator-vertical="^\n--\n$">
|
||||
<script type="text/template">
|
||||
## Demo 2
|
||||
Slide 1.1
|
||||
|
||||
--
|
||||
|
||||
## Demo 2
|
||||
Slide 1.2
|
||||
|
||||
---
|
||||
|
||||
## Demo 2
|
||||
Slide 2
|
||||
</script>
|
||||
</section>
|
||||
|
||||
<!-- No "extra" slides, since the separator can't be matched ("---" will become horizontal rulers) -->
|
||||
<section data-markdown data-separator="$x">
|
||||
<script type="text/template">
|
||||
A
|
||||
|
||||
---
|
||||
|
||||
B
|
||||
|
||||
---
|
||||
|
||||
C
|
||||
</script>
|
||||
</section>
|
||||
|
||||
<!-- Slide attributes -->
|
||||
<section data-markdown>
|
||||
<script type="text/template">
|
||||
<!-- .slide: data-background="#000000" -->
|
||||
## Slide attributes
|
||||
</script>
|
||||
</section>
|
||||
|
||||
<!-- Element attributes -->
|
||||
<section data-markdown>
|
||||
<script type="text/template">
|
||||
## Element attributes
|
||||
- Item 1 <!-- .element: class="fragment" data-fragment-index="2" -->
|
||||
- Item 2 <!-- .element: class="fragment" data-fragment-index="1" -->
|
||||
</script>
|
||||
</section>
|
||||
|
||||
<!-- Code -->
|
||||
<section data-markdown>
|
||||
<script type="text/template">
|
||||
```php [1|3-5]
|
||||
public function foo()
|
||||
{
|
||||
$foo = array(
|
||||
'bar' => 'bar'
|
||||
)
|
||||
}
|
||||
```
|
||||
</script>
|
||||
</section>
|
||||
|
||||
<!-- add optional line count offset, in this case 287 -->
|
||||
<section data-markdown>
|
||||
<script type="text/template">
|
||||
## echo.c
|
||||
|
||||
```c [287: 2|4,6]
|
||||
/* All of the options in this arg are valid, so handle them. */
|
||||
p = arg + 1;
|
||||
do {
|
||||
if (*p == 'n')
|
||||
nflag = 0;
|
||||
if (*p == 'e')
|
||||
eflag = '\\';
|
||||
} while (*++p);
|
||||
```
|
||||
[source](https://git.busybox.net/busybox/tree/coreutils/echo.c?h=1_36_stable#n287)
|
||||
</script>
|
||||
</section>
|
||||
|
||||
<!-- Images -->
|
||||
<section data-markdown>
|
||||
<script type="text/template">
|
||||

|
||||
</script>
|
||||
</section>
|
||||
|
||||
<!-- Math -->
|
||||
<section data-markdown>
|
||||
## The Lorenz Equations
|
||||
`\[\begin{aligned}
|
||||
\dot{x} & = \sigma(y-x) \\
|
||||
\dot{y} & = \rho x - y - xz \\
|
||||
\dot{z} & = -\beta z + xy
|
||||
\end{aligned} \]`
|
||||
</section>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -147,6 +33,8 @@
|
||||
<script>
|
||||
|
||||
Reveal.initialize({
|
||||
width: 1920,
|
||||
height: 1080,
|
||||
controls: true,
|
||||
progress: true,
|
||||
history: true,
|
||||
|
||||
@@ -1,41 +1,133 @@
|
||||
# Markdown Demo
|
||||
# RUG: Turbo LLM for Rust Unit Test Generation
|
||||
|
||||
Keywords: LLM, Rust, Unit Test
|
||||
|
||||
Research date: 2022, published date: 2025
|
||||
|
||||
|
||||
|
||||
## External 1.1
|
||||
#### Introduction
|
||||
|
||||
Content 1.1
|
||||
* Unit testing is crucial but costly.
|
||||
|
||||
Note: This will only appear in the speaker notes window.
|
||||
* Rust's strict type system.
|
||||
|
||||
* Existing LLM approaches often fail.
|
||||
|
||||
|
||||
## External 1.2
|
||||
#### Rust Unit Test
|
||||
|
||||
Content 1.2
|
||||
```rust
|
||||
/// Returns the sum of two numbers
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// assert_eq!(add(2, 3), 5);
|
||||
/// assert_eq!(add(-1, 1), 0);
|
||||
/// ```
|
||||
fn add(a: i32, b: i32) -> i32 {
|
||||
a + b
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
#### Challenge
|
||||
|
||||
```rust
|
||||
fn encode<E: Encoder>(&self: char, encoder: E) -> Result<EncodeError> // target function
|
||||
|
||||
impl<W: Writer, C: Config> Encoder for EncoderImpl
|
||||
|
||||
pub struct EncoderImpl<W: Writer, C: Config>
|
||||
impl Writer for SliceWriter
|
||||
impl Writer for IoWriter
|
||||
|
||||
impl<T> Config for T where T: R1 + R2 + R3
|
||||
pub struct Configuration<R1, R2, R3>
|
||||
```
|
||||
|
||||
Simplified python version
|
||||
|
||||
```python
|
||||
def encode(char_data, encoder):
|
||||
result = encoder.process(char_data)
|
||||
return result
|
||||
|
||||
class Encoder:
|
||||
def __init__(self, writer, config):
|
||||
self.config = config
|
||||
|
||||
def process(self, data):
|
||||
output = self.writer.write(data, self.config)
|
||||
return output
|
||||
|
||||
class Config:
|
||||
def __init__(self):
|
||||
self.settings = {}
|
||||
|
||||
config = Config()
|
||||
encoder = Encoder(stdout, config)
|
||||
|
||||
# Test code
|
||||
result = encode('A', encoder)
|
||||
```
|
||||
|
||||
LLM generated code are hard to pass the compiler.
|
||||
|
||||
|
||||
|
||||
## External 2
|
||||
#### RUG design
|
||||
|
||||
Content 2.1
|
||||
<img src="./images/Screenshot_20251125_010053.jpeg"
|
||||
width="75%">
|
||||
|
||||
|
||||
|
||||
## External 3.1
|
||||
<img src="./images/Screenshot_20251125_011029.jpeg" width="80%">
|
||||
|
||||
Content 3.1
|
||||
<img src="./images/Screenshot_20251125_011348.jpeg" width="80%">
|
||||
|
||||
|
||||
## External 3.2
|
||||
|
||||
Content 3.2
|
||||
#### Implementation
|
||||
|
||||
- gpt-3.5-turbo-16k-0613
|
||||
- gpt-4-1106
|
||||
- presence penalty set to -1
|
||||
- frequency_penalty set to 0.5
|
||||
- temperature set to 1 (by default)
|
||||
|
||||
|
||||
## External 3.3 (Image)
|
||||
|
||||

|
||||
#### Eval: Comparison with Traditional Tools
|
||||
|
||||
<img src="./images/Screenshot_20251125_014355.jpeg" width="75%">
|
||||
|
||||
|
||||
## External 3.4 (Math)
|
||||
#### Token Consumption
|
||||
|
||||
`\[ J(\theta_0,\theta_1) = \sum_{i=0} \]`
|
||||
- GPT-4 cost 1000$ in baseline method (send the whole context)
|
||||
- RUG saved 51.3% tokens (process unique dependency only once)
|
||||
|
||||
|
||||
|
||||
#### Real-World Usability
|
||||
|
||||
> We directly leverage RUG's generated tests, without changing test bodies and send them as PRs to the open source projects.
|
||||
> To our surprise, the developers are happy to merge these machine generated tests.
|
||||
> RUG generated a total of 248 unit tests, of which we submitted 113 to the corresponding crates based on their quality and priority.
|
||||
> So far, 53 of these unit tests have been merged with positive feedback.
|
||||
|
||||
> Developers chose not to merge 17 tests for two main reasons:
|
||||
> first, the target functions are imported from external libraries(16),
|
||||
> and the developers do not intend to include tests
|
||||
|
||||
|
||||
|
||||
#### 2025 Situation
|
||||
|
||||
<img src="./images/Screenshot_20251125_015416.jpeg" width="60%">
|
||||
|
||||
|
||||
<img src="./images/Screenshot_20251125_015705.jpeg" width="60%">
|
||||
|
||||
Reference in New Issue
Block a user