Skip to content

Commit 1d26b06

Browse files
committed
Add a test for ABC144-D
1 parent 0bc6686 commit 1d26b06

34 files changed

+107
-22
lines changed

examples/abc144-d.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// https://atcoder.jp/contests/abc144/tasks/abc144_d
2+
3+
use defmac::defmac;
4+
5+
use std::f64::consts::PI;
6+
use std::io::{self, Read as _};
7+
8+
fn main() {
9+
let mut input = "".to_owned();
10+
io::stdin().read_to_string(&mut input).unwrap();
11+
let mut input = input.split_whitespace();
12+
defmac!(read => input.next().unwrap().parse().unwrap());
13+
14+
let (a, b, x): (f64, f64, f64) = (read!(), read!(), read!());
15+
16+
let ans = 180.0 / PI
17+
* if x >= (a.powi(2) * b) / 2.0 {
18+
libm::atan2(2.0 * (a.powi(2) * b - x), a.powi(3))
19+
} else {
20+
PI / 2.0 - libm::atan2(2.0 * x, a * b.powi(2))
21+
};
22+
println!("{}", ans);
23+
}

examples/tests.ron

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,63 @@
1-
// 手元でDropboxのテストケース(ある場合)で確認し、Gitに含めるのはそのうちサンプルのみ
2-
// CI上でもサンプルだけテストする。(Dropboxから引っ張るのも面倒だし何より誰のアカウントを使うかという問題がある)
1+
// 手元でDropboxのテストケース(ある場合)で確認し、サンプルに含まれていないやつが大きいときはそれらをGitに入れない
2+
// その場合CI上でもサンプルだけテストする。(Dropboxから引っ張るのも面倒だし何より誰のアカウントを使うかという問題がある)
33

44
(
55
tests: {
66
"apg4b-a": (
77
name: "APG4b: A - 1.00.はじめに",
8-
matching: ExactWhole,
8+
matching: Exact,
99
),
1010
"apg4b-ex25": (
1111
name: "APG4b: EX25 - 集合の操作 / 3.05",
12-
matching: ExactWords,
12+
matching: Words,
1313
),
1414
"apg4b-ex26": (
1515
name: "APG4b: EX26 - 電卓を作ろう3 / 3.06",
16-
matching: ExactWords,
16+
matching: Exact,
1717
),
1818
"practice-a": (
1919
name: "practice contest: A - Welcome to AtCoder",
20-
matching: ExactWords,
20+
matching: Words,
2121
),
2222
"atc001-b": (
2323
name: "ATC001: B - Union Find",
24-
matching: ExactWords,
24+
matching: Words,
2525
),
2626
"atc002-b": (
2727
name: "ATC002: B - n^p mod m",
28-
matching: ExactWords,
28+
matching: Words,
2929
),
3030
"arc065-c": (
3131
name: "ABC049 / ARC065: C - 白昼夢 / Daydream",
32-
matching: ExactWords,
32+
matching: Words,
3333
),
3434
"abc054-c": (
3535
name: "ABC045: C - One-stroke Path",
36-
matching: ExactWords,
36+
matching: Words,
3737
),
3838
"arc084-c": (
3939
name: "ABC077 / ARC084: C - Snuke Festival",
40-
matching: ExactWords,
40+
matching: Words,
4141
),
4242
"abc084-d": (
4343
name: "ABC084: D - 2017-like Number",
44-
matching: ExactWords,
44+
matching: Words,
4545
),
4646
"abc120-d": (
4747
name: "ABC120: D - Decayed Bridges",
48-
matching: ExactWords,
48+
matching: Words,
4949
),
5050
"abc129-f": (
5151
name: "ABC129: F - Takahashi's Basics in Education and Learning",
52-
matching: ExactWords,
52+
matching: Words,
5353
),
5454
"abc142-d": (
55-
name: "ABC124: D - Disjoint Set of Common Divisors",
56-
matching: ExactWords,
55+
name: "ABC142: D - Disjoint Set of Common Divisors",
56+
matching: Words,
57+
),
58+
"abc144-d": (
59+
name: "ABC144: D - Water Bottle",
60+
matching: FloatOr(abs: 1e-6, rel: 1e-6),
5761
),
5862
}
5963
)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
100 100 1000000
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
100 100 1
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
22 75 24126
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
45 72 83481
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
47 29 44734
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2 75 25
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
82 84 416241
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
56 32 30430
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
28 37 11105
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
39 18 23359
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
79 6 29018
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
68 68 313904
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2 2 4
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
12 21 10
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
3 1 8
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0.0000000000
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
89.9998854084
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
66.3790171829
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
53.8288157430
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
20.4206366709
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
89.7453537677
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
28.3216596827
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
43.2962287317
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
59.9115059975
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
7.7168423353
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
1.9580634609
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0.1924235310
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
45.0000000000
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
89.7834636934
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
4.2363947991

tools/test-with-generated-opts/Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ description = "Test with `rustc-dep-option-generator`."
77

88
[dependencies]
99
anyhow = "1.0.25"
10+
approx = "0.3.2"
1011
env_logger = "0.7.1"
1112
indexmap = { version = "1.3.0", features = ["serde-1"] }
1213
itertools = "0.8.2"
1314
log = "0.4.8"
1415
ron = "0.5.1"
15-
serde = { version = "1.0.103", features = ["derive"] }
16-
serde_json = "1.0.42"
16+
serde = { version = "1.0.104", features = ["derive"] }
17+
serde_json = "1.0.44"
1718
shell-escape = "0.1.4"
1819
structopt = "0.3.5"
1920
tempdir = "0.3.7"

tools/test-with-generated-opts/src/main.rs

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use anyhow::{anyhow, Context as _};
2+
use approx::{abs_diff_eq, relative_eq};
23
use env_logger::fmt::Color;
34
use indexmap::IndexMap;
45
use itertools::Itertools as _;
@@ -9,6 +10,7 @@ use tempdir::TempDir;
910

1011
use std::collections::{BTreeMap, HashMap};
1112
use std::env;
13+
use std::f64;
1214
use std::ffi::{OsStr, OsString};
1315
use std::fs::{self, File};
1416
use std::io::{self, Read as _, Write as _};
@@ -222,17 +224,42 @@ struct Test {
222224

223225
#[derive(Debug, Clone, Copy, Deserialize)]
224226
enum Matching {
225-
ExactWhole,
226-
ExactWords,
227+
Exact,
228+
Words,
229+
FloatOr {
230+
#[serde(default = "nan")]
231+
abs: f64,
232+
#[serde(default = "nan")]
233+
rel: f64,
234+
},
235+
}
236+
237+
const fn nan() -> f64 {
238+
f64::NAN
227239
}
228240

229241
impl Matching {
230242
fn accepts(self, expected: &str, actual: &str) -> bool {
231243
match self {
232-
Matching::ExactWhole => expected == actual,
233-
Matching::ExactWords => {
244+
Matching::Exact => expected == actual,
245+
Matching::Words => {
234246
itertools::equal(expected.split_whitespace(), actual.split_whitespace())
235247
}
248+
Matching::FloatOr { abs, rel } => itertools::diff_with(
249+
expected.split_whitespace(),
250+
actual.split_whitespace(),
251+
|expected, actual| {
252+
if let (Ok(expected), Ok(actual)) =
253+
(expected.parse::<f64>(), actual.parse::<f64>())
254+
{
255+
abs_diff_eq!(expected, actual, epsilon = abs)
256+
|| relative_eq!(expected, actual, max_relative = rel)
257+
} else {
258+
expected == actual
259+
}
260+
},
261+
)
262+
.is_none(),
236263
}
237264
}
238265
}

0 commit comments

Comments
 (0)