{"id":"v001","input":{"g1":2,"g2":-3,"length":"600 ft","pvi_station":"10+00.00","pvi_elevation":"100.0 ft"},"expect":{"result.pvc_station":"7+00.00","result.pvt_station":"13+00.00","result.pvc_elevation.value":94.0,"result.pvt_elevation.value":91.0,"result.k":120.0,"result.turning_station":"9+40.00","result.turning_elevation.value":96.39999999999999,"ok":true},"source":"add-survey-suite scenarios","sourceVersion":"2026","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09},"result.turning_elevation.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v002","input":{"g1":-4,"g2":2,"length":"400 ft","pvi_station":"25+00.00","pvi_elevation":"350.0 ft"},"expect":{"result.pvc_station":"23+00.00","result.pvt_station":"27+00.00","result.pvc_elevation.value":358.0,"result.pvt_elevation.value":354.0,"result.k":66.66666666666667,"result.turning_station":"25+66.67","result.turning_elevation.value":352.66666666666663,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09},"result.turning_elevation.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v003","input":{"g1":1.5,"g2":-1.5,"length":"300 ft","pvi_station":"120+00.00","pvi_elevation":"20.5 ft"},"expect":{"result.pvc_station":"118+50.00","result.pvt_station":"121+50.00","result.pvc_elevation.value":18.25,"result.pvt_elevation.value":18.25,"result.k":100.0,"result.turning_station":"120+00.00","result.turning_elevation.value":19.375,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09},"result.turning_elevation.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v004","input":{"g1":-2,"g2":-0.5,"length":"500 ft","pvi_station":"8+00.00","pvi_elevation":"60.0 ft"},"expect":{"result.pvc_station":"5+50.00","result.pvt_station":"10+50.00","result.pvc_elevation.value":65.0,"result.pvt_elevation.value":58.75,"result.k":333.3333333333333,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09}}}
{"id":"v005","input":{"g1":3,"g2":1,"length":"200 ft","pvi_station":"15+00.00","pvi_elevation":"75.25 ft"},"expect":{"result.pvc_station":"14+00.00","result.pvt_station":"16+00.00","result.pvc_elevation.value":72.25,"result.pvt_elevation.value":76.25,"result.k":100.0,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09}}}
{"id":"v006","input":{"g1":-3.5,"g2":1.25,"length":"800 ft","pvi_station":"34+50.00","pvi_elevation":"912.4 ft"},"expect":{"result.pvc_station":"30+50.00","result.pvt_station":"38+50.00","result.pvc_elevation.value":926.4,"result.pvt_elevation.value":917.4,"result.k":168.42105263157896,"result.turning_station":"36+39.47","result.turning_elevation.value":916.0842105263157,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09},"result.turning_elevation.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v007","input":{"g1":0.8,"g2":-2.2,"length":"450 ft","pvi_station":"68+00.00","pvi_elevation":"1520.75 ft"},"expect":{"result.pvc_station":"65+75.00","result.pvt_station":"70+25.00","result.pvc_elevation.value":1518.95,"result.pvt_elevation.value":1515.8,"result.k":150.0,"result.turning_station":"66+95.00","result.turning_elevation.value":1519.43,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09},"result.turning_elevation.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v008","input":{"g1":-1.0,"g2":-3.0,"length":"350 ft","pvi_station":"9+10.00","pvi_elevation":"44.0 ft"},"expect":{"result.pvc_station":"7+35.00","result.pvt_station":"10+85.00","result.pvc_elevation.value":45.75,"result.pvt_elevation.value":38.75,"result.k":175.0,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09}}}
{"id":"v009","input":{"g1":4.5,"g2":0.5,"length":"1000 ft","pvi_station":"220+00.00","pvi_elevation":"5280.0 ft"},"expect":{"result.pvc_station":"215+00.00","result.pvt_station":"225+00.00","result.pvc_elevation.value":5257.5,"result.pvt_elevation.value":5282.5,"result.k":250.0,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09}}}
{"id":"v010","input":{"g1":-0.6,"g2":0.9,"length":"250 ft","pvi_station":"1+25.00","pvi_elevation":"10.0 ft"},"expect":{"result.pvc_station":"0+00.00","result.pvt_station":"2+50.00","result.pvc_elevation.value":10.75,"result.pvt_elevation.value":11.125,"result.k":166.66666666666666,"result.turning_station":"1+00.00","result.turning_elevation.value":10.450000000000001,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09},"result.turning_elevation.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v011","input":{"g1":2.75,"g2":-2.75,"length":"900 ft","pvi_station":"150+50.00","pvi_elevation":"734.6 ft"},"expect":{"result.pvc_station":"146+00.00","result.pvt_station":"155+00.00","result.pvc_elevation.value":722.225,"result.pvt_elevation.value":722.225,"result.k":163.63636363636363,"result.turning_station":"150+50.00","result.turning_elevation.value":728.4125,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09},"result.turning_elevation.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v012","input":{"g1":-5.0,"g2":3.0,"length":"640 ft","pvi_station":"40+00.00","pvi_elevation":"250.5 ft"},"expect":{"result.pvc_station":"36+80.00","result.pvt_station":"43+20.00","result.pvc_elevation.value":266.5,"result.pvt_elevation.value":260.1,"result.k":80.0,"result.turning_station":"40+80.00","result.turning_elevation.value":256.5,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09},"result.turning_elevation.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v013","input":{"g1":1.2,"g2":3.4,"length":"300 ft","pvi_station":"7+00.00","pvi_elevation":"88.8 ft"},"expect":{"result.pvc_station":"5+50.00","result.pvt_station":"8+50.00","result.pvc_elevation.value":87.0,"result.pvt_elevation.value":93.89999999999999,"result.k":136.36363636363635,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09}}}
{"id":"v014","input":{"g1":-2.4,"g2":0.3,"length":"720 ft","pvi_station":"99+90.00","pvi_elevation":"1001.1 ft"},"expect":{"result.pvc_station":"96+30.00","result.pvt_station":"103+50.00","result.pvc_elevation.value":1009.74,"result.pvt_elevation.value":1002.1800000000001,"result.k":266.6666666666667,"result.turning_station":"102+70.00","result.turning_elevation.value":1002.06,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09},"result.turning_elevation.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v015","input":{"g1":6.0,"g2":-4.0,"length":"1200 ft","pvi_station":"300+00.00","pvi_elevation":"3000.0 ft"},"expect":{"result.pvc_station":"294+00.00","result.pvt_station":"306+00.00","result.pvc_elevation.value":2964.0,"result.pvt_elevation.value":2976.0,"result.k":120.0,"result.turning_station":"301+20.00","result.turning_elevation.value":2985.6,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09},"result.turning_elevation.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v016","input":{"g1":-0.25,"g2":0.75,"length":"150 ft","pvi_station":"5+55.00","pvi_elevation":"12.34 ft"},"expect":{"result.pvc_station":"4+80.00","result.pvt_station":"6+30.00","result.pvc_elevation.value":12.5275,"result.pvt_elevation.value":12.9025,"result.k":150.0,"result.turning_station":"5+17.50","result.turning_elevation.value":12.480625,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09},"result.turning_elevation.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v017","input":{"g1":3.3,"g2":-0.7,"length":"520 ft","pvi_station":"12+34.00","pvi_elevation":"456.7 ft"},"expect":{"result.pvc_station":"9+74.00","result.pvt_station":"14+94.00","result.pvc_elevation.value":448.12,"result.pvt_elevation.value":454.88,"result.k":130.0,"result.turning_station":"14+03.00","result.turning_elevation.value":455.19849999999997,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09},"result.turning_elevation.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v018","input":{"g1":-1.8,"g2":2.6,"length":"660 ft","pvi_station":"77+77.00","pvi_elevation":"640.0 ft"},"expect":{"result.pvc_station":"74+47.00","result.pvt_station":"81+07.00","result.pvc_elevation.value":645.94,"result.pvt_elevation.value":648.58,"result.k":150.0,"result.turning_station":"77+17.00","result.turning_elevation.value":643.51,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09},"result.turning_elevation.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v019","input":{"g1":0.4,"g2":-0.4,"length":"200 ft","pvi_station":"3+00.00","pvi_elevation":"5.0 ft"},"expect":{"result.pvc_station":"2+00.00","result.pvt_station":"4+00.00","result.pvc_elevation.value":4.6,"result.pvt_elevation.value":4.6,"result.k":250.0,"result.turning_station":"3+00.00","result.turning_elevation.value":4.8,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09},"result.turning_elevation.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v020","input":{"g1":-3.0,"g2":-0.2,"length":"480 ft","pvi_station":"160+00.00","pvi_elevation":"2020.2 ft"},"expect":{"result.pvc_station":"157+60.00","result.pvt_station":"162+40.00","result.pvc_elevation.value":2027.4,"result.pvt_elevation.value":2019.72,"result.k":171.42857142857144,"ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.pvc_elevation.value":{"rel":1e-11,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-11,"abs":1e-09},"result.k":{"rel":1e-11,"abs":1e-09}}}
{"id":"v021","input":{"g1":-1.75,"g2":2.25,"length":"500 ft","pvi_station":"13+80","pvi_elevation":"577.50 ft"},"expect":{"result.pvc_station":"11+30.00","result.pvc_elevation.value":581.875,"result.pvt_station":"16+30.00","result.pvt_elevation.value":583.125,"result.turning_station":"13+48.75","result.k":125.0,"result.curve_type":"low","ok":true},"source":"Indiana Department of Transportation, Indiana Design Manual chapter 44, example 44-3.1 (figure 44-3G)","sourceVersion":"Chapter 44 (current), retrieved 2026-09-19","tolerance":{"result.pvc_elevation.value":{"rel":1e-12,"abs":1e-09},"result.pvt_elevation.value":{"rel":1e-12,"abs":1e-09},"result.k":{"rel":1e-12,"abs":1e-09}}}
