Files
five/examples/class_full_test.prg
Charles KWON OhJun 59568f3301 Five v0.9 — Harbour + Go fusion language
- Compiler: PP → Lexer → Parser → Analyzer → Gengo pipeline
- Parser: 232/236 (98%) Harbour compatibility, registry-based dispatch
- RTL: 351 Harbour-compatible functions
- RDD: DBF/NTX/CDX engines with Rushmore bitmap optimization
- Go Interop: IMPORT + pkg.Func() + obj:Method() with FastPath (15M calls/sec)
- HB_FUNC API: Full Harbour C API compatible Go bridge
- Concurrency: SPAWN/LAUNCH/GOROUTINE, <-, WATCH, PARALLEL FOR, ASYNC/AWAIT
- Extensions: Multi-return, DEFER, Slice, f-string, Nil-safe ?:, CONST
- Macro Compiler: Runtime AST parsing and evaluation
- Debugger: TUI debugger with source display, breakpoints, stepping
- FRB: Native + Pcode dual mode runtime binary
- Tests: 13 packages ALL PASS

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 09:41:50 +09:00

141 lines
3.2 KiB
Plaintext

// CLASS 기능 전수 테스트
// TBrowse 포팅에 필요한 모든 CLASS 기능
CLASS Counter
DATA nValue INIT 0
DATA nStep INIT 1
DATA cName INIT "default"
METHOD New(cName, nStep)
METHOD Inc()
METHOD Dec()
METHOD GetValue()
METHOD SetValue(n)
METHOD Reset()
METHOD ToString()
ENDCLASS
METHOD New(cName, nStep) CLASS Counter
::cName := cName
IF nStep != NIL
::nStep := nStep
ENDIF
RETURN Self
METHOD Inc() CLASS Counter
::nValue += ::nStep
RETURN Self
METHOD Dec() CLASS Counter
::nValue -= ::nStep
RETURN Self
METHOD GetValue() CLASS Counter
RETURN ::nValue
METHOD SetValue(n) CLASS Counter
::nValue := n
RETURN Self
METHOD Reset() CLASS Counter
::nValue := 0
RETURN Self
METHOD ToString() CLASS Counter
RETURN ::cName + "=" + Str(::nValue)
// Inheritance test
CLASS StepCounter INHERIT FROM Counter
DATA nMaxValue INIT 100
METHOD Inc()
METHOD IsMax()
ENDCLASS
METHOD Inc() CLASS StepCounter
IF ::nValue + ::nStep <= ::nMaxValue
::nValue += ::nStep
ENDIF
RETURN Self
METHOD IsMax() CLASS StepCounter
RETURN ::nValue >= ::nMaxValue
FUNCTION Main()
LOCAL o, o2, nPass := 0
? "=== CLASS Full Test ==="
? ""
// 1. Basic construction
? "--- 1. Construction ---"
o := Counter():New("test", 5)
nPass += Assert("New name", o:cName, "test")
nPass += Assert("New step", o:nStep, 5)
nPass += Assert("Init value", o:nValue, 0)
// 2. Method calls
? "--- 2. Methods ---"
o:Inc()
nPass += Assert("Inc once", o:GetValue(), 5)
o:Inc()
o:Inc()
nPass += Assert("Inc 3x", o:GetValue(), 15)
o:Dec()
nPass += Assert("Dec", o:GetValue(), 10)
// 3. Method chaining (RETURN Self)
? "--- 3. Chaining ---"
o:Reset():Inc():Inc()
nPass += Assert("Chain reset+inc+inc", o:GetValue(), 10)
// 4. SetValue + ToString
? "--- 4. Setters ---"
o:SetValue(42)
nPass += Assert("SetValue", o:GetValue(), 42)
nPass += Assert("ToString", o:ToString(), "test=42")
// 5. Multiple instances
? "--- 5. Multiple instances ---"
o2 := Counter():New("other", 10)
o2:Inc():Inc():Inc()
nPass += Assert("Instance 2", o2:GetValue(), 30)
nPass += Assert("Instance 1 unchanged", o:GetValue(), 42)
// 6. Inheritance
? "--- 6. Inheritance ---"
LOCAL oStep := StepCounter():New("step", 25)
oStep:nMaxValue := 50
oStep:Inc()
nPass += Assert("StepCounter inc", oStep:GetValue(), 25)
oStep:Inc()
nPass += Assert("StepCounter inc 2", oStep:GetValue(), 50)
oStep:Inc()
nPass += Assert("StepCounter max", oStep:GetValue(), 50)
nPass += Assert("IsMax", oStep:IsMax(), .T.)
// 7. Inherited method
nPass += Assert("Inherited ToString", oStep:ToString(), "step=50")
// 8. Field access as getter
? "--- 7. Field access ---"
nPass += Assert("Field getter", o:cName, "test")
nPass += Assert("Field getter 2", oStep:nMaxValue, 50)
// Summary
? ""
? "========================"
? " CLASS PASS:", nPass
? "========================"
RETURN NIL
FUNCTION Assert(cDesc, xGot, xExpected)
IF ValType(xGot) = ValType(xExpected) .AND. xGot = xExpected
RETURN 1
ENDIF
? " FAIL:", cDesc
? " Got:", xGot
? " Exp:", xExpected
RETURN 0